在laravel 5中的子文件夹下创建控制器的正确方法

Ken*_*Yap 5 php laravel laravel-routing laravel-5

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

Http
--Controller
----Auth
Run Code Online (Sandbox Code Playgroud)

所以我想做的就是制作这样的东西

Http
--Controller
----Auth
----Folder_a
----Folder_b
----Folder_c
Run Code Online (Sandbox Code Playgroud)

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

<?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*/
}
Run Code Online (Sandbox Code Playgroud)

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

Route::get('/action1/', array('as' => 'action1', 'uses' => 'SomethingController@action1'));
Run Code Online (Sandbox Code Playgroud)

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

ReflectionException in compiled.php line 1029:
Class App\Http\Controllers\SomethingController does not exist
Run Code Online (Sandbox Code Playgroud)

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

Route::get('/action1/', array('as' => 'action1', 'uses' => 'Folder_a\SomethingController@action1'));
Run Code Online (Sandbox Code Playgroud)

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

luk*_*ter 6

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

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