如果参数不是整数,如何以不同的方式定义路由

2022-08-30 18:39:37

我正在使用Laravel 5并在本地工作。我用参数{id}制作了一个路由,用一个特定名称创建了另一个路由,如下所示:

Route::get('contacts/{id}', 'ContactController@get_contact');
Route::get('contacts/new', 'ContactController@new_contact');

我在这里的问题是,如果我尝试去本地主机/联系人/新,它将自动访问get_contact方法。我知道我已经创建了一个{id}参数,但是如果我只想在我的参数是整数时才调用get_contact怎么办?如果不是,请检查它是否为“新”并访问new_contact方法。然后,如果它不是整数而不是“新”,则错误页 404。

如何在Laravel 5中执行此操作?

感谢您的帮助!


答案 1

只需添加到要接受仅编号参数的路由:->where('id', '[0-9]+')

Route::get('contacts/{id}', 'ContactController@get_contact')->where('id', '[0-9]+');
Route::get('contacts/new', 'ContactController@new_contact');

阅读更多: http://laravel.com/docs/master/routing#route-parameters


答案 2

尽管接受的答案是完全可以的,但通常一个参数被多次使用,因此您可能希望通过在位于(Laravel 5.3及更高版本)的文件中的函数中定义模式来使用DRY方法:bootRouteServiceProvider.phpapp/Providers

 /**
 * Define your route model bindings, pattern filters, etc.
 *
 * @return void
 */
public function boot()
{
    Route::pattern('id', '[0-9]+');

    parent::boot();
}

这样,无论何时使用参数,约束都会适用。{id}


推荐