路由到 Laravel 5 中子文件夹中的控制器

Route to controller in subfolder in Laravel 5

这是我的 routes.php:

Route::get('/', 'Panel\PanelController@index');

这是我的文件夹:

Http/
....Controllers/
................Panel/
....................../PanelController.php

这是我的控制器:

namespace App\Http\Controllers;

class PanelController extends Controller {

/* some code here... */

}

这是我得到的:

Class App\Http\Controllers\Panel\PanelController does not exist

我尝试了 "composer dump-autoload" 命令但仍然无效...

您 class 的命名空间必须与目录结构相匹配。在这种情况下,您必须调整 class 并添加 Panel

namespace App\Http\Controllers\Panel;
//                             ^^^^^

use App\Http\Controllers\Controller;

class PanelController extends Controller {

/* some code here... */

}

遵循三个简单的步骤

  1. 在命名空间中附加文件夹名称

    namespace App\Http\Controllers\Panel;
    
  2. 控制器在class定义前添加"use App\Http\Controllers\Controller;"

    namespace App\Http\Controllers\Panel;
    use App\Http\Controllers\Controller;
    
  3. 任意路由调用控制器时添加文件夹名

    Route::get('foo','Panel\PanelController@anyaction');
    

没有必要运行"composer dump-autoload"

您可以生成一个带有子文件夹的控制器,如下所示:

php artisan make:controller Panel\PanelController

它会自动创建适当的命名空间和目录文件。 并像之前提到的那样在路由中引用它:

Route::get('/some','Panel\PanelControllder@yourAction');

编码愉快!