laravel 5中的子文件夹路由

我在子文件夹中使用控制器进行路由时遇到问题 . 我已经尝试了Laravel Controller Subfolder routing中提出的解决方案,但我无法让它工作 .

文件夹结构

HTTP
   Controllers
      Admin
        AdminControllers
      User
        UserControllers
      BaseController

Admincontrollers在“App \ HTTP \ Controllers \ Admin”命名空间中定义

路由文件

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

这看起来很奇怪,但这是让它保持正常工作的唯一方法 . 如果我删除

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

如果我删除

Route::get('myevents', 'AdminEventController@myevents');
 //errormessage Action App\Http\Controllers\AdminEventController@myevents not defined.

如果我将控制器放在控制器命名空间(而不是管理员命名空间)中,我仍然可以

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

当添加的唯一路线是

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

回答(2)

2 years ago

问题是视图中的调用:

改变

<td>{!!Html::linkAction('AdminEventController@show', $event->name, $event->slug)!!}</td>

<td>{!!Html::linkAction('Admin\AdminEventController@show', $event->name, $event->slug)!!}</td>

固定它 .

Laravel Controller Subfolder routing中的Laravel 5解决方案是正确的 . 问题不在路径文件或控制器中 .

2 years ago

是如果您的应用程序变得像这样大,那么使用子文件夹构造控制器是有意义的 . 但它需要更多的努力,而不仅仅是在这里和那里移动文件 . 让我解释一下这个结构 .

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

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

namespace App\Http\Controllers\Admin;

使用Controller - 从你的内部命名空间Laravel将不会“理解”扩展Controller,所以你需要添加:

use App\Http\Controllers\Controller;

路由 - 指定完整路径这将不再起作用:

Route::get('admin', 'AdminController@index');

这是正确的方法:

Route::get('admin', 'Admin\AdminController@index');

就是这样 - 现在你可以从子文件夹中使用你的控制器了 .

参考(测试):http://laraveldaily.com/moving-controllers-to-sub-folders-in-a-correct-way/作者:Povilas Korop