在Laravel 5下的多域项目中路由子文件夹控制器

时间:2015-08-02 23:05:27

标签: controller laravel-5 laravel-routing subdirectory

主要问题是如何在子文件夹中路由控制器? 我有一个多域项目,问题是我想将每个控制器和视图分成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

1 个答案:

答案 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/