所以我已经退房了 PHP - Routing with Parameters in Laravel 和 Laravel 4 mandatory parameters error
然而,使用所说的内容 - 除非我不了解filter / get / parameters如何工作,否则我似乎无法进行简单的路由。
所以我想做的是路由URL为/ display / 2 其中display是一个动作而2是id,但我想将它限制为仅限数字。
我想
Route::get('displayproduct/(:num)','SiteController@display');
Route::get('/', 'SiteController@index');
class SiteController extends BaseController {
public function index()
{
return "i'm with index";
}
public function display($id)
{
return $id;
}
}
问题是它会抛出404 如果我使用
Route::get('displayproduct/{id}','SiteController@display');
它将传递参数,但URL可以显示/ ABC,它将传递参数。 我想将其限制为仅限数字。
我也不希望它变得安静,因为索引I理想地希望将此控制器与不同的动作混合。
答案 0 :(得分:8)
假设您使用的是Laravel 4,则无法使用(:num),您需要使用正则表达式进行过滤。
Route::get('displayproduct/{id}','SiteController@display')->where('id', '[0-9]+');
答案 1 :(得分:3)
您还可以定义全局路由模式
Route::pattern('id', '\d+');
如何/何时有用?
假设您有多个需要参数的路由(比如id
):
Route::get('displayproduct/{id}','SiteController@display');
Route::get('editproduct/{id}','SiteController@edit');
而且你知道在所有情况下id
都必须是一个数字。
然后只需使用id
Route patterns
参数的约束即可
Route::pattern('id', '\d+');
执行上述操作将确保所有接受id
作为参数的路由都将应用id
需要为数字的约束。