【问题标题】:Laravel advance routesLaravel 高级路线
【发布时间】:2016-03-18 05:54:56
【问题描述】:

以下是路线

Route::get('{value1}/{optvalue1?}/{optvalue2?}/{value2}/{value3}/',
        [
            'uses'  => 'Controller@control',
            'as'    => 'path_route'
        ]
    );

我的控制器设置如下

function redirectSearchRequest(){

return redirect()->route('path_route', [
        $value1,
        isset($optvalue1) ? $optvalue1 : '',
        isset($optvalue2) ? $optvalue2 : '',
       $value2,
       $value3
    ]);

}


public function control($value1, $iptvalue1 = null, $optvalue2 = null, $value2, $value3)
{
    //process accordingly
}

现在的问题是 如果我有一个看起来像http://example.com/value1/optvalue1/optvalue2/value2/value3url。它可以正常工作,但 url 有时可能没有 optvlaue1optvalue2 并且路由返回 http://example.com/value1////value2/value3,正如预期的 laravel 抛出 NotFoundHttpException

此问题的更多信息Option 变量并不总是存在,但当它们存在时,它们应该与路由的设置方式完全相同。我无法更改顺序:(。

希望我足够清楚。 为你的帮助干杯。

【问题讨论】:

    标签: php laravel-5 routing


    【解决方案1】:

    可选变量在末尾时效果更好,以避免出现您所看到的 404 错误。您可以尝试几种解决方法:

    选项 1:

    考虑路线的每一种可能变化:

    Route::get('{value1}/{optvalue1?}/{optvalue2?}/{value2}/{value3}/', Controller@control );
    Route::get('{value1}/{optvalue1?}/{value2}/{value3}/', Controller@control );
    Route::get('{value1}/{optvalue2?}/{value2}/{value3}/', Controller@control );
    Route::get('{value1}/{value2}/{value3}/', Controller@control );
    

    选项 2:

    在查询字符串中使用可选参数

    Route::get('{value1}/{value2}/{value3}/', Controller@control );
    

    只需添加?optvalue1=something&optvalue2=something-else

    否则,识别哪个参数是哪个参数会变得非常复杂。

    选项 3:

    另一种解决方案可能是将optvalue1optvalue2 的值默认为某个值。例如

    http://example.com/value1/null/null/value2/value3
    

    【讨论】:

      猜你喜欢
      • 2016-11-25
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 2020-03-15
      • 2015-04-17
      • 1970-01-01
      • 2015-09-22
      • 2010-12-23
      相关资源
      最近更新 更多