2015-06-01 195 views
0

我在使用子文件夹中的控制器路由时遇到问题。我尝试了Laravel Controller Subfolder routing中提出的解决方案,但我无法使其运行。laravel中的子文件夹路由5

文件夹结构

HTTP 
    Controllers 
     Admin 
     AdminControllers 
     User 
     UserControllers 
     BaseController 

Admincontrollers在定义的 '应用程序\ HTTP \控制器\管理员' 命名空间

routes文件

Route::group(['middleware'=> 'admin','prefix' => 'admin'], function() { 
    Route::get('home', '[email protected]'); 
    Route::get('home', 'Admin\[email protected]'); 
    Route::resource('events', 'AdminEventController'); 
    Route::resource('events', 'Admin\AdminEventController'); 
    Route::get('myevents', '[email protected]'); 
    Route::get('myevents', 'Admin\[email protected]'); 
    Route::resource('groups', 'AdminGroupController'); 
    Route::resource('users', 'AdminUserController'); 
}); 

这似乎不可思议,但它是只有这样才能保证它现在正常工作。 如果我删除

Route::get('myevents', 'Admin\[email protected]'); 
    //errormessage Class App\Http\Controllers\AdminEventController does not exist 

如果我删除

如果我把控制器控制器命名空间(而不是管理员之一) 我仍然获得

//errormessage Class App\Http\Controllers\AdminEventController does not exist 

当只添加的路线是

Route::resource('events', 'AdminEventController'); 
+1

你试过完全合格的控制器的名字吗?例如。 '路线:: get('home','App \ Http \ Controllers \ Admin \ AdminHomeController @ index');'我的猜测是Laravel(或者是composer自动加载器)试图猜测你指的是什么,它错了。 – Kryten

+0

这并没有诀窍,但新的错误给了我一个想法,现在它已经修复 – JorenV

回答

0

是如果您的应用程序变得这样更大,则使用子文件夹构建控制器是有意义的。但是在这里和那里移动文件需要更多的努力。让我解释一下结构。

例如,我们想要一个子文件夹app/Http/Controllers/Admin,然后在里面有我们的AdminController.php,没关系。我们需要的文件本身里面做什么:

正确的命名空间 - 指定文件夹内:

namespace App\Http\Controllers\Admin; 

使用的控制器 - 从你内心的命名空间Laravel并不能“理解”扩展控制器,所以你需要补充一点:

use App\Http\Controllers\Controller; 

路线 - 指定完整路径 这将不再工作:

Route::get('admin', '[email protected]'); 

这是正确的做法:

Route::get('admin', 'Admin\[email protected]'); 

这就是它 - 现在你可以从子文件夹中使用您的控制器。

参考(测试): http://laraveldaily.com/moving-controllers-to-sub-folders-in-a-correct-way/ 通过:波维拉斯科罗普