2016-03-18 80 views
0

以下是路由Laravel前进路线

Route::get('{value1}/{optvalue1?}/{optvalue2?}/{value2}/{value3}/', 
     [ 
      'uses' => '[email protected]', 
      '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。它的工作原理没有任何错误,但URL可以是有时没有optvlaue1optvalue2和预期laravel抛出NotFoundHttpException路线返回http://example.com/value1////value2/value3

进一步对这个问题Option变量并不总是存在,但是当他们是他们应该是完全一样的路线是如何设置的。您的帮助,我不能改变顺序各地:(。

希望我是不够清楚。 干杯。

回答

0

可选变量更好的工作,当他们到了最后,以避免404错误就像你所看到的。有几种解决方法可以尝试:

选项1:

占路线的每一个可能的变化:

Route::get('{value1}/{optvalue1?}/{optvalue2?}/{value2}/{value3}/', [email protected]); 
Route::get('{value1}/{optvalue1?}/{value2}/{value3}/', [email protected]); 
Route::get('{value1}/{optvalue2?}/{value2}/{value3}/', [email protected]); 
Route::get('{value1}/{value2}/{value3}/', [email protected]); 

选项2:

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

Route::get('{value1}/{value2}/{value3}/', [email protected]); 

而只是添加?optvalue1=something&optvalue2=something-else

否则,确定哪些参数是变得非常复杂。

方案3:

另一种解决办法是的optvalue1optvalue2值默认为东西。例如。

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