Laravel 5 找不到自定义命名空间的类

Sty*_*hon 3 php namespaces autoload laravel laravel-5

在我的 Laravel 应用程序中,我将前端和后端代码拆分到文件夹中。这些是app/Http/Controllers/BackEndapp/Http/Controllers/FrontEnd。我认为定义两个命名空间BackEndFrontEnd. 我已将我的作曲家文件编辑为:

"autoload": {
    "classmap": [
        "app/Models",
        "database"
    ],
    "psr-4": {
        "App\\": "app/",
        "BackEnd\\": "app/Http/Controllers/BackEnd",
        "FrontEnd\\": "app/Http/Controllers/FrontEnd"
    }
},
Run Code Online (Sandbox Code Playgroud)

然后我运行 composer autodump 并像这样设置我的路由文件:

Route::group(['prefix' => 'webman', 'middleware' => 'auth', 'namespace' => 'BackEnd'], function()
{
   Route::get('/', ['as' => 'webmanHome', 'uses' => 'HomeController@index']); 
});
Run Code Online (Sandbox Code Playgroud)

但是当我浏览到时,localhost:8000/webman/我只是收到一个错误,Class App\Http\Controllers\BackEnd\HomeController does not exist. 控制器确实存在,这是文件:

<?php namespace BackEnd;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class HomeController extends Controller {

    /**
     * Display the admin home page, showing the front-end menu and "apps" as links to other sections of the ACP.
     *
     * @param Reqeust       $request
     *
     * @return View
     */
    public function index(Request $request)
    {
        return view('backend.index');
    }

}
Run Code Online (Sandbox Code Playgroud)

我已经检查vendor/composer/autoload_psr4.php以确保正在定义命名空间,并且它在返回的数组中'BackEnd\\' => array($baseDir . '/app/Http/Controllers/BackEnd'),

奇怪的是,如果我<?php namespace App\Http\Controllers\BackEnd;在顶部使用,HomeController.php那么一切正常,为什么?我错过了什么?为什么不能自动加载找到文件BackEnd

use*_*930 5

设置namespaceRoute::group()实际上是将其附加到App\Http\Controllers. 您可以做的是删除它并像这样引用完整路径:

Route::group(['prefix' => 'webman', 'middleware' => 'auth'], function()
{
    Route::get('/', ['as' => 'webmanHome', 'uses' => '\BackEnd\HomeController@index']); 
});
Run Code Online (Sandbox Code Playgroud)