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

Posted

技术标签:

【中文标题】路由到 Laravel 5 子文件夹中的控制器【英文标题】:Route to controller in subfolder in Laravel 5 【发布时间】:2015-03-27 20:25:27 【问题描述】:

这是我的 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”命令,但还是不行……

【问题讨论】:

【参考方案1】:

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

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

use App\Http\Controllers\Controller;

class PanelController extends Controller 

/* some code here... */


【讨论】:

你又跑composer dump-autoload了吗? 确定:/ Laravel 5 中可能发生了一些变化? 糟糕,现在是另一个错误:找不到类 'App\Http\Controllers\Panel\Controller' 啊哈,这更有意义.. 现在的问题是您的控制器正在扩展Controller,这是一个命名空间级别“向上”。只需添加use App\Http\Controllers\Controller; 即可导入 哇,现在我有这个错误:FatalErrorException in 5d407ee96656111b417e8f98552f6c80 第 271 行:语法错误,文件意外结束【参考方案2】:

遵循三个简单的步骤

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

    namespace App\Http\Controllers\Panel;
    

    添加“使用App\Http\Controllers\Controller;”到类定义之前的控制器

    namespace App\Http\Controllers\Panel;
    use App\Http\Controllers\Controller;
    

    在任何路由中调用控制器时添加附加的文件夹名称

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

无需运行“composer dump-autoload”

【讨论】:

只是小修正,删除面板前的\ - Route::get('foo','Panel\PanelController@anyaction');【参考方案3】:

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

php artisan make:controller Panel\PanelController

它会自动创建适当的名称空间和带有目录的文件。 并如前所述在路由中引用它:

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

编码愉快!

【讨论】:

以上是关于路由到 Laravel 5 子文件夹中的控制器的主要内容,如果未能解决你的问题,请参考以下文章

路由到子文件夹中的控制器在 Laravel 4 中不起作用

Laravel 5 子文件夹路由

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

路由到 CodeIgniter 中的多个子文件夹

Laravel 5.4 路由器中的条件设置控制器

为啥我得到一个 404 到 laravel 5.7 公共子文件夹?