我有没有办法设置一个路由设置,其中一个正则表达式部分不会作为参数传递?
例如:
Route::get('{string}/method/{id}', function($id)
{
return 'only one parameter passed, ID is ' . $id;
});
具体来说,我正在路由到控制器,并且这些方法需要与来自其他地方的路由兼容,这些路由不包括第一个参数。
答案 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 Overloading和call_user_func_array以真正了解params
。