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

Oli*_*tti 9 php controller laravel laravel-5

这是我的routes.php:

Route::get('/', 'Panel\PanelController@index');
Run Code Online (Sandbox Code Playgroud)

这是我的文件夹:

Http/
....Controllers/
................Panel/
....................../PanelController.php
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

namespace App\Http\Controllers;

class PanelController extends Controller {

/* some code here... */

}
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

Class App\Http\Controllers\Panel\PanelController does not exist
Run Code Online (Sandbox Code Playgroud)

我尝试了"composer dump-autoload"命令,但仍然没有工作......

luk*_*ter 20

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

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

use App\Http\Controllers\Controller;

class PanelController extends Controller {

/* some code here... */

}
Run Code Online (Sandbox Code Playgroud)

  • Aha更有意义..现在的问题是你的控制器正在扩展`Controller`,这是一个命名空间级别"up".只需添加`use App\Http\Controllers\Controller;`即可导入它 (3认同)

ale*_*x t 7

按照三个简单的步骤

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

    namespace App\Http\Controllers\Panel;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加"使用App\Http\Controllers\Controller;" 在类定义之前到控制器

    namespace App\Http\Controllers\Panel;
    use App\Http\Controllers\Controller;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在任何路径中调用控制器时添加附加的文件夹名称

    Route::get('foo','Panel\PanelController@anyaction');
    
    Run Code Online (Sandbox Code Playgroud)

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