在我的Laravel应用程序中,我将前端和后端代码分成文件夹。这些是app/Http/Controllers/BackEnd和app/Http/Controllers/FrontEnd。与其在每个文件上键入所有这些内容,我认为定义两个名称空间( BackEnd和FrontEnd )会更容易。我编辑了我的作曲家文件如下:
"autoload": {
"classmap": [
"app/Models",
"database"
],
"psr-4": {
"App\\": "app/",
"BackEnd\\": "app/Http/Controllers/BackEnd",
"FrontEnd\\": "app/Http/Controllers/FrontEnd"
}
},然后运行composer自动转储并设置如下的路由文件:
Route::group(['prefix' => 'webman', 'middleware' => 'auth', 'namespace' => 'BackEnd'], function()
{
Route::get('/', ['as' => 'webmanHome', 'uses' => 'HomeController@index']);
});但是当我浏览到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');
}
}我已经检查了vendor/composer/autoload_psr4.php,以确保名称空间被定义了,并且它是在返回的'BackEnd\\' => array($baseDir . '/app/Http/Controllers/BackEnd'),数组中。
奇怪的是,如果我在<?php namespace App\Http\Controllers\BackEnd;的顶部使用HomeController.php,那么一切都正常,为什么?我遗漏了什么?为什么autoload找不到只有BackEnd的文件
发布于 2015-06-29 10:09:38
在Route::group()中设置Route::group()时,实际上是将其附加到App\Http\Controllers中。您可以做的是删除它并引用如下所示的完整路径:
Route::group(['prefix' => 'webman', 'middleware' => 'auth'], function()
{
Route::get('/', ['as' => 'webmanHome', 'uses' => '\BackEnd\HomeController@index']);
});发布于 2015-06-29 10:17:52
尝试在RouteServiceProvider.php protected $namespace = 'App\Http\Controllers';中更改/注释下面一行
发布于 2017-02-12 19:13:39
有个有趣而简单的方法可以绕过这一切..。服务提供者。
当通过提供程序加载路由文件时,“App\Http.”没有被强制执行。
public function boot()
{
$this->loadRoutesFrom(app_path('Your/Model/routes.php'));
}请记住,也没有附加任何中间件。您的路由组将必须指定一个'web‘中间件,否则您会发疯,不知道为什么验证等不再工作…(在那里!)
无论如何,这是一种很酷的方法,使用提供程序会导致更多的模块化代码和重用。
https://stackoverflow.com/questions/31112491
复制相似问题