laravel 5中的子文件夹路由

时间:2015-06-01 19:40:55

标签: laravel-5 laravel-routing

我在使用子文件夹中的控制器进行路由时遇到问题。我已尝试过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 个答案:

答案 0 :(得分:0)

问题在于视图中的调用:

更改

<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解决方案是正确的。问题不在路径文件或控制器中。

答案 1 :(得分:0)

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

例如,我们希望有一个子文件夹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