在laravel 5

时间:2015-05-23 13:20:56

标签: php laravel laravel-5 laravel-routing

我一直在为这个问题苦苦挣扎,我不知道自己做错了什么。所以情况就是这样。我想创建一个控制器文件夹,将不同的控制器组合到他们的组中。默认情况下,laravel项目创建了一个像这样的控制器文件夹结构

Http
--Controller
----Auth

所以我想做的就是做这样的事情

Http
--Controller
----Auth
----Folder_a
----Folder_b
----Folder_c

制作文件夹后,文件夹中的控制器也正确地命名为

<?php namespace App\Http\Controllers\Folder_a;

    /*
    |--------------------------------------------------------------------------
    | Use the main controller to allow extend to the main controller
    |--------------------------------------------------------------------------

    */

    use App\Http\Controllers\Controller;

class SomethingController extends Controller {
        /* Do something here*/
}

最后在我的routes.php中,我将这样的行为称为

Route::get('/action1/', array('as' => 'action1', 'uses' => 'SomethingController@action1'));

但有些当我尝试导航到该网站时它会给我这个错误

ReflectionException in compiled.php line 1029:
Class App\Http\Controllers\SomethingController does not exist

注意到它仍然进入默认文件夹App \ Http \ Controllers \以找到控制器,但如果我喜欢这个

Route::get('/action1/', array('as' => 'action1', 'uses' => 'Folder_a\SomethingController@action1'));

然后一切都会好的......在这种情况下我做错了什么?我也试过过composer dump-autoload,一切都没有改变。

3 个答案:

答案 0 :(得分:6)

你没有做错任何事。这是预期的行为! Laravel默认会搜索相对于App\Http\Controllers的指定控制器。所以你必须从那里指定命名空间。如果在Folder_a中有许多通向控制器的路由,则可以使用路由组进行清理:

Route::group(['namespace' => 'Folder_a'], function(){
    Route::get('/action1/', array('as' => 'action1', 'uses' => 'SomethingController@action1'));
    // more routes
});

答案 1 :(得分:0)

我认为没有必要在文件夹中对控制器进行分组。你每个资源大多有1个控制器,每个资源都是它自己的东西。如果您有50-100个控制器,那没有错。如果你把它们放在文件夹中,你最终会得到那么多文件夹,所以嵌套文件不会有帮助。

正常启动,然后重构,如果你真的需要。

答案 2 :(得分:0)

其他答案是正确的,但是如果您要从web.php中删除文件夹名称,则该名称将变为

Route::get('/action1/', array('as' => 'action1', 'uses' => 'SomethingController@action1'));
  1. 在您的控制器中,从名称空间中删除 Folder_a ,使其变为

    命名空间App \ Http \ Controllers;

  2. composer dump-autoload