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/