Laravel 5 下的多域项目中的路由子文件夹控制器
Routing sub-folder controllers in a multiple domain project under Laravel 5
主要问题是如何在子文件夹中路由控制器?
我有一个多域项目,问题是我想分开每个控制器并查看 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
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/
目录中,而 class 看起来像
<?php
namespace App\Http\Controllers\Center;`
class IndexCtrl
{
public function inicio()
{
}
}
因为您添加了前缀选项,所以您的所有路由 url 都应以 /club/
为前缀。 IE。 inicio()
方法应该可以从 url:
访问
http://site.club/club/
主要问题是如何在子文件夹中路由控制器? 我有一个多域项目,问题是我想分开每个控制器并查看 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
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/
目录中,而 class 看起来像
<?php
namespace App\Http\Controllers\Center;`
class IndexCtrl
{
public function inicio()
{
}
}
因为您添加了前缀选项,所以您的所有路由 url 都应以 /club/
为前缀。 IE。 inicio()
方法应该可以从 url:
http://site.club/club/