1

所以我检查了 PHP - 在 LaravelLaravel 4 中使用参数路由错误 4 强制参数错误

但是使用所说的-除非我不了解过滤器/获取/参数的工作原理,否则我似乎无法进行简单的路由。

所以我想做的是有一个 /display/2 的 URL 路由,其中​​ 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 可以是 display/ABC 并且它将传递参数。我只想将其限制为数字。

我也不希望它变得安静,因为我希望理想情况下将这个控制器与不同的动作混合使用索引。

4

2 回答 2

8

假设你使用 Laravel 4 你不能使用 (:num),你需要使用正则表达式来过滤。

Route::get('displayproduct/{id}','SiteController@display')->where('id', '[0-9]+');
于 2013-07-16T03:00:30.887 回答
3

您还可以定义全局路由模式

Route::pattern('id', '\d+');

这如何/何时有帮助?

假设您有多个需要参数的路由(比如说id):

Route::get('displayproduct/{id}','SiteController@display');
Route::get('editproduct/{id}','SiteController@edit');

而且您知道,在所有情况下,anid都必须是数字。

然后id可以使用简单地在所有路线上设置所有参数的约束Route patterns

Route::pattern('id', '\d+');

执行上述操作将确保所有接受id作为参数的路由都将应用id需要为数字的约束。

于 2014-04-13T13:31:40.207 回答