有没有办法在 Laravel 4 中混合静态路由和动态路由?
Posted
技术标签:
【中文标题】有没有办法在 Laravel 4 中混合静态路由和动态路由?【英文标题】:Is there a way to mix static with dynamic routes in Laravel 4? 【发布时间】:2014-11-14 13:47:16 【问题描述】:我想知道是否有一种方法可以指定静态路由,以及一种动态查找根级页面 url 的方法,我的 routes.php 文件中会出现如下内容
Route::get('admin/users', array('before' => 'isAdmin', 'uses' => 'UserController@userAdministration'));
Route::post('admin/users', array('before' => 'isAdmin', 'uses' => 'UserController@userList'));
Route::post('profile', 'UserController@profile');
Route::get('dynamic_page','PageController@getPage');
我该如何设置?
【问题讨论】:
【参考方案1】:解决此问题的最佳方法取决于您尝试使用“动态”路线做什么。
您的路由可以正常工作,因为对 URL http://example.com/admin/users
和 http://example.com/profile
的 GET 或 POST 调用将被路由到 UserController,而任何其他“根”级别的 GET(例如调用 http://example.com/some_page
)将路由到PageController
的getPage
方法。从那里,您可以访问 dynamic_page 参数,并根据需要对其进行操作:
class PageController extends BaseController
public function getPage($dynamic_page)
// do something here with $dynamic_page:
//
// for example, return a view based on $dynamic_page
// return View::make($dynamic_page);
//
// or retrieve a row from the database based on $dynamic_page
// $page = new Page($dynamic_page);
return ('The page is '.$dynamic_page);
大概,在您的 PageController 中,您将需要对 $dynamic_page 做一些事情以确保有效的响应可用——通过 switch 语句运行它,也许,检查可用的视图,或查询数据库——否则返回一个NotFoundHttpException
.
在routes.php
中处理一些此类逻辑可能会更好——例如,要求 dynamic_page 满足某些要求——一个数字 ID,也许,通过添加
->where('dynamic_page', '[0-9]+');
(正如上面乔尔建议的那样)。
另外请注意,您设置它的方式只接受“根级”通配符;带有附加参数(例如 http://example.com/some_page/something_else
)的调用将失败,返回 NotFoundHttpException
和/或导致 404 错误页面。
【讨论】:
【参考方案2】:我也不清楚你在问什么。但动态路由的示例如下(注意参数 customer_id 及其使用方式):
Route::get('customer_id/profile', 'CustomerController@getProfile')->where('customer_id', '[0-9]+');
根 url 路由可能如下所示:
Route::get('/', array('as' => 'root', 'uses' => 'RootController@showRoot'));
同样,我不完全确定您所说的“动态查找根 url”是什么意思。
【讨论】:
以上是关于有没有办法在 Laravel 4 中混合静态路由和动态路由?的主要内容,如果未能解决你的问题,请参考以下文章