以下是路线
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
。它的工作没有任何错误,但网址有时可能没有optvlaue1
和optvalue2
,路由会返回http://example.com/value1////value2/value3
,因为预期的laravel会抛出NotFoundHttpException
。
此问题的更多内容Option
变量并不总是存在,但是当它们存在时,它们应该与路径的设置方式完全相同。我不能改变顺序:(。
希望我足够清楚。 干杯为你提供帮助。
答案 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:
另一种解决方案可能是将optvalue1
和optvalue2
的值默认为某些内容。 E.g。
http://example.com/value1/null/null/value2/value3