有没有办法在Laravel 4中混合静态和动态路线?

时间:2014-09-19 21:47:07

标签: php laravel url-routing laravel-routing

我想知道是否有办法指定静态路由,以及动态查找根级别页面网址的方法,类似下面的内容将在我的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');

我该如何设置?

2 个答案:

答案 0 :(得分:1)

我也不清楚你在问什么。但是动态路由的示例如下(注意param customer_id以及如何使用它):

Route::get('{customer_id}/profile', 'CustomerController@getProfile')->where('customer_id', '[0-9]+');

根网址路线可能如下所示:

Route::get('/', array('as' => 'root', 'uses' => 'RootController@showRoot'));

同样,我并不完全确定你动态查找根网址的含义。

答案 1 :(得分:1)

解决这个问题的最佳方法取决于您正在尝试使用"动态"路由。

您的路由工作正常,因为对网址http://example.com/admin/usershttp://example.com/profile的GET或POST调用将路由到UserController,而其他任何" root"级别GET(例如,呼叫http://example.com/some_page)将路由到getPage的{​​{1}}方法。从那里,您可以访问{dynamic_page}参数,并按照您的意愿对其执行操作:

PageController

据推测,在你的PageController中,你需要用$ dynamic_page做一些事情以确保有效的响应可用 - 通过switch语句运行它,或许,检查可用的View,或查询数据库 - 否则返回一个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); } }

NotFoundHttpException处理一些逻辑可能会更好 - 例如,要求{dynamic_page}满足某些要求 - 可能是通过添加

来获得数字ID

routes.php(正如Joel上面所说)。

另请注意,您设置它的方式只接受" root-level"通配符;使用其他参数(例如->where('dynamic_page', '[0-9]+');)的调用将失败,返回http://example.com/some_page/something_else和/或导致404错误页面。