主要问题是如何在子文件夹中路由控制器? 我有一个多域项目,问题是我想将每个控制器和视图分成Club和Center文件夹,但我不知道如何配置一个路径来搜索控制器到一个文件夹。
这是结构:
Controllers
|----------Club
| |---IndexCtrl
| |---ClientsCtrl
| |--- ...
|
|----------Center
|----IndexCtrl
|----UsersCtrl
|----ServicesCtrl
|---- ...
这是我的routes.php
文件,在其他答案中看到了一些配置:
<?php
/*
|--------------------------------------------------------------------------
|Routes for site.club
|--------------------------------------------------------------------------
|
*/
Route::group(array(
'domain' => 'site.club',
'namespace' => 'Club',//I saw this on other SO answer, I guess it's the folder
'prefix' => 'club',//Also on the other SO answer
), function() {
Route::get('/', [
'as' => 'publicIndex',
'uses' =>'IndexCtrl@inicio'
]);
});
/*
|--------------------------------------------------------------------------
|Routes for site.center
|--------------------------------------------------------------------------
|
*/
Route::group(array(
'domain' => 'site.center',
'namespace' => 'Center',
'prefix' => 'center',
), function() {
Route::get('/', [
'as' => 'adminIndex',
'uses' =>'IndexCtrl@inicio'
]);
});
现在我的猜测是:我将如何配置Controller?,这个例子只是说将命名空间设置为文件夹的路径,在这种情况下我的命名空间将是这样的:
<?php namespace Site\Http\Controllers\Center;
是吗?
或者我只需要运行composer dump-autoload
?
上述结果是一个错误,它说:
Class Site\Http\Controllers\IndexCtrl does not exist
答案 0 :(得分:0)
Class Site\Http\Controllers\IndexCtrl does not exist
错误很可能是因为当您的命名空间为app/http/controllers/foo
时,您的文件位于site\http\controllers\foo
。 Laravel遵循PSR-4约定,这些约定将您的文件路径视为与命名空间相同。
Route::group([
'domain' => 'site.club',
'namespace' => 'Club',
'prefix' => 'club',
], function() {
Route::get('/', [
'as' => 'publicIndex',
'uses' =>'IndexCtrl@inicio'
]);
});
对于上述路由组,所有路由都应具有以下命名空间:
namespace App\Http\Controllers\Center;
所以你的IndexCtrl
应该位于/app/http/controllers/center/
目录中,类看起来像
<?php
namespace App\Http\Controllers\Center;`
class IndexCtrl
{
public function inicio()
{
}
}
因为您添加了前缀选项,所有路由网址都应以/club/
为前缀。 I.E.应该可以从网址访问inicio()
方法:
http://site.club/club/