【问题标题】:Laravel routes with regex portions that don't get passed as parametersLaravel 路由带有不作为参数传递的正则表达式部分
【发布时间】:2014-02-04 22:25:50
【问题描述】:

有什么方法可以设置一个不作为参数传递的正则表达式部分的路由?

例如:

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

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

【问题讨论】:

    标签: php laravel routing


    【解决方案1】:

    最重要的是,路由必须根据它的声明进行匹配,例如,如果你在这里定义一个像你的例子那样的路由

    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 Overloadingcall_user_func_array 以了解missingMethod 的真实想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 2013-03-28
      • 1970-01-01
      • 2012-04-30
      相关资源
      最近更新 更多