路由到 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 子文件夹中的控制器的主要内容,如果未能解决你的问题,请参考以下文章