2016-03-18 154 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