Laravel路由的正则表达式部分不会作为参数传递

时间:2014-02-04 22:25:50

标签: php laravel routing

我有没有办法设置一个路由设置,其中一个正则表达式部分不会作为参数传递?

例如:

Route::get('{string}/method/{id}', function($id)
{
    return 'only one parameter passed, ID is ' . $id;
});

具体来说,我正在路由到控制器,并且这些方法需要与来自其他地方的路由兼容,这些路由不包括第一个参数。

1 个答案:

答案 0 :(得分:0)

最重要的是,路线必须根据它的声明进行匹配,例如,如果您在此处定义类似路线的路线

Route::get('{string}/method/{id}', function($id)
{
    return 'only one parameter passed, ID is ' . $id;
});

然后,请求的url必须与相同数量的参数匹配,包括http方法(此处为GET),在这种情况下,路线将仅匹配此类

httP//example.com/something/method/10

这里第二个参数10不一定是数字,因为你没有使用where(...)使它成为一个数字,所以,它可以是任何东西,但必须是两个参数。

作为替代方案,您可以在控制器中定义missing方法,如下所示(仅限一个想法)

public function missingMethod($args = array())
{
    // $args will contain all parameters
}

这是Laravel中的一个特殊方法,任何控制器都可以包含它,并且只要在该控制器中调用不存在的方法,就会调用此missingMethod并且所有参数都将是作为一个数组传递给它的$args参数,所以如果你在url中有两个参数并且控制器中缺少调用方法,那么你可以在这个方法范围内得到那些参数,比如{{1根据{{​​1}}的计数,您可以根据此方法调用所需的方法。

所以,如果您只是将路线的动作指向具有缺失方法的控制器,那么从[param1, param2]您可以根据您的其他方法使用不同的参数调用另一种方法。

同时检查PHP Overloadingcall_user_func_array以真正了解params