Laravel / Lumen PSR-4:如果我把类放到子目录中,那么我必须使用不同的名称空间吗?

时间:2017-11-13 16:26:05

标签: php namespaces composer-php lumen laravel-5.5

请查看我的应用程序结构的以下部分:

App
-Events
-Http
--Controllers
---Rest
-Services
--Base
--Primary

我想要做的是为所有服务使用名称空间App\Services,为所有控制器使用名称空间App\Http\Controller

这就是我的应用程序加载Composer的方式:

"autoload": {
    "psr-4": {
        "App\\": "app/"
    } }

这是我得到的例外:

  

(1/1)FatalThrowableError类' App \ Services \ CapabilityService'不   结果

CapabilityService肯定存在,但它位于子文件夹Primary内。有没有办法将文件从子目录自动加载到一个名称空间?如果是的话,有什么重要的理由不这样做吗?

这是CapabilityService:

namespace App\Services;

这是位置:

App/Services/Primary/CapabilityService

1 个答案:

答案 0 :(得分:0)

Nvm我想出来了 - 只需在 "autoload": { "psr-4": { "App\\": "app/", "App\\Services\\": ["app/services","app/services/base","app/services/primary"], "App\\Models\\": ["app/models","app/models/traits"], "App\\Http\\Controllers\\": ["app/http/controllers","app/http/controllers/base","app/http/controllers/rest","app/http/controllers/rest/base"] }, 内执行数组,您可以在其中指定所有子文件夹:

<?php
class superheroes{
    const kal_el = 'Superman';
}

$instance = new superheroes;
echo $instance::kal_el;

更好的解决方案仍然受到欢迎。