如何在 Laravel 5.2 中使用资源声明路由

Posted

技术标签:

【中文标题】如何在 Laravel 5.2 中使用资源声明路由【英文标题】:How to declare routes with resources in Laravel 5.2 【发布时间】:2016-10-21 14:11:41 【问题描述】:

我在 laravel 的 routes.php 中有一些路由

 // Code for rounting admin panel
 Route::resource('/admin','Admin\LoginController@index');
 Route::resource('/admin/dashboard','Admin\AdminController@index');
 Route::resource('/admin/movies','Admin\MovieController@index');

现在,当我访问 url http://localhost/askspidy/admin 时,我想显示登录页面并且它可以工作,但是当我访问 url http://localhost/askspidy/admin/dashboard 时,它应该转到仪表板,但它只显示登录页面。 我知道这是因为当它在任何 url 中找到 /admin 时,默认情况下会转到路由

 Route::resource('/admin','Admin\LoginController@index');

我知道它假设 (/admin) 是到控制器的路由, (/dashboard) 是控制器中声明的函数,但我只想要这样的路由,所以对于这个问题还有其他解决方案吗。

【问题讨论】:

尝试在路由中使用命名空间和前缀,以防止重复。 【参考方案1】:

RESTful Resource Controller 负责每个操作。您只需要列出名称和控制器:

Route::resource('photo', 'PhotoController');

如果您只想使用index 方法,您可以这样列出:

Route::resource('photo', 'PhotoController', ['only' => [
    'index'
]]);

但是,您的两条路线似乎不适合资源(登录和仪表板),因为它们应该与编辑模型有关。

您应该改用 get() 资源。

From the docs:

Route::get('user/id', 'UserController@showProfile');

所以在你的情况下,它会是:

Route::get('/admin','Admin\LoginController@index');
Route::get('/admin/dashboard','Admin\AdminController@index');
Route::resource('/admin/movie','Admin\MovieController');

【讨论】:

谢谢这对我有用,是的,登录和仪表板不需要资源。

以上是关于如何在 Laravel 5.2 中使用资源声明路由的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.2 如何在刀片中获取路由参数?

如何使用where关键字检查Laravel 5.2路由中的状态参数?

如何更改 Laravel 5.2 更改登录路由?

如何在Laravel 5.2中将表单数据作为路由参数传递

如何从 db 中的两个表中路由、获取和显示数据到 laravel 5.2 中的单个网页

在 laravel 5.2 中禁用特定路由的 Web 中间件