Laravel推进路线

时间:2016-03-18 05:54:57

标签: php laravel-5 routing

以下是路线

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
}

现在问题是 如果我的url看起来像http://example.com/value1/optvalue1/optvalue2/value2/value3。它的工作没有任何错误,但网址有时可能没有optvlaue1optvalue2,路由会返回http://example.com/value1////value2/value3,因为预期的laravel会抛出NotFoundHttpException

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

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

1 个答案:

答案 0 :(得分:0)

可选变量最终会更好地工作,以避免像您看到的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的值默认为某些内容。 E.g。

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