具有强制参数的Laravel路径控制器

时间:2013-07-16 02:50:24

标签: php laravel laravel-4 pattern-matching

所以我已经退房了 PHP - Routing with Parameters in LaravelLaravel 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理想地希望将此控制器与不同的动作混合。

2 个答案:

答案 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需要为数字的约束。