简体   繁体   English

升级到Laravel 5后的命名空间问题

[英]Namespacing issue after upgrading to Laravel 5

I am trying to update our application to Laravel 5.1 from 4.2. 我正在尝试将我们的应用程序从4.2更新到Laravel 5.1。 We are going for a full upgrade from the start. 我们将从一开始就进行全面升级。 We were using psr-4 namespaces in 4.2 so this wasn't expected to fail nor we were able to find its origin either, all seems fine. 我们在4.2中使用了psr-4命名空间,因此这不会失败,也无法找到其起源,一切似乎都很好。 All our endpoints (domains, we have 4 in total) are facing the same issue on accessing any route. 我们所有的端点(域,我们总共有4个)在访问任何路由时都面临相同的问题。

App Directory Structure 应用目录结构

Console
    Commands
        BackTools
        Consumer
        [Other Endpoints]
Events
Exceptions
Http
    Controllers
        BackTools
        Consumer
        [Other Endpoints]
    Middleware
        BackTools
        Consumer
        [Other Endpoints]
    Requests
    Routes
        BackTools
        Consumer
        [Other Endpoints]
    ViewComposers
        BackTools
        Consumer
        [Other Endpoints]
Jobs
    BackTools
    Consumer
    [Other Endpoints]
Libraries
Listeners
Providers

Routes 路线

Route::group(array(
    'domain' => Config::get('settings.domains.back'),
    'namespace' => 'back\\controllers'
), function () {
    Route::get('login', array('as' => 'auth.back.login', 'uses' => 'AuthController@getBackLogin'));
    Route::get('logout', array('as' => 'auth.back.logout', 'uses' => 'AuthController@getBackLogout'));
    Route::post('login', array('as' => 'auth.back.login', 'uses' => 'AuthController@postBackLogin'));
});

Composer 作曲家

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "companyX\\": "app/",
        "back\\composers\\": "app/Http/ViewComposers/BackTools",
        "back\\controllers\\": "app/Http/Controllers/BackTools",
        "back\\jobs\\": "app/Jobs/BackTools",
        "back\\middleware\\": "app/Http/Middleware/BackTools",
        "consumer\\composers\\": "app/Http/ViewComposers/Consumer",
        "consumer\\controllers\\": "app/Http/Controllers/Consumer",
        "consumer\\jobs\\": "app/Jobs/Consumer",
        "consumer\\middleware\\": "app/Http/Middleware/Consumer",          
        "companyX\\commands\\": "app/Console/Commands",
        "companyX\\composers\\": "app/ViewComposers",
        "companyX\\controllers\\": "app/Http/Controllers",
        "companyX\\jobs\\": "app/Jobs",
        "companyX\\libraries\\": "app/Libraries",
        "companyX\\providers\\": "app/Providers"
    }
},

Autoload Classmap After Optimize 优化后自动加载类图

'back\\controllers\\AuthController' => $baseDir . '/app/Http/Controllers/BackTools/AuthController.php',
'back\\controllers\\BackToolsController' => $baseDir . '/app/Http/Controllers/BackTools/BackToolsController.php',

Example Error 错误示例

ReflectionException in Container.php line 736: 
Class swaggable\Http\Controllers\back\controllers\BackToolsController does not exist
  • Open RouteServiceProvider under Providers 在提供者下打开RouteServiceProvider
  • Change $namespace to '' 将$ namespace更改为''

If someone else can give me an explanation, I'll mark his answer as best. 如果其他人可以给我一个解释,我会将他的回答标记为最佳。 The concept of having a default namespace may appeal to someone but for me it shreds the most beautiful aspect of psr-4 namespacing. 具有默认名称空间的概念可能会吸引某人,但对我而言,它粉碎了psr-4名称间隔最美丽的方面。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM