【发布时间】:2014-02-04 22:25:50
【问题描述】:
有什么方法可以设置一个不作为参数传递的正则表达式部分的路由?
例如:
Route::get('{string}/method/{id}', function($id)
{
return 'only one parameter passed, ID is ' . $id;
});
具体来说,我正在路由到一个控制器,并且这些方法需要与来自其他地方的路由兼容,这些路由不包含第一个参数。
【问题讨论】:
有什么方法可以设置一个不作为参数传递的正则表达式部分的路由?
例如:
Route::get('{string}/method/{id}', function($id)
{
return 'only one parameter passed, ID is ' . $id;
});
具体来说,我正在路由到一个控制器,并且这些方法需要与来自其他地方的路由兼容,这些路由不包含第一个参数。
【问题讨论】:
最重要的是,路由必须根据它的声明进行匹配,例如,如果你在这里定义一个像你的例子那样的路由
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,并将所有参数传递给它的@ 987654333@ 参数作为数组,因此如果您在 url 中有两个参数并且在控制器中缺少调用方法,那么您可能会在此方法范围内获取这些参数,例如 [param1, param2] 并通过此方法您可以调用您的所需的方法取决于params 的计数。
因此,如果您只是将路由的操作指向该控制器,该控制器具有缺少的方法,那么您可以从 missingMethod 调用另一个方法,根据您的其他方法使用不同的参数。
同时查看PHP Overloading 和call_user_func_array 以了解missingMethod 的真实想法。
【讨论】: