2016-09-21 179 views
1

我的路線是:Laravel路線可選參數問題

Route::get('members/{name?}/{id}', '[email protected]'); 
Route::get('members/{id}/edit', '[email protected]'); 

當我點擊來自葉片上的URL鏈接,

<a href="members/1/edit">Edit</a> 

它進入第一路徑,並呼籲Sample1Controller @ sampleFn1。爲什麼??請幫助..

當我點擊鏈接..我想去第二條路線並調用Sample2Controller @ sampleFn2。任何幫助?

在此先感謝。

+0

,當您訪問'會員/ 1/edit',因爲它可以匹配路線你在那裏,它選擇第一個,'1' = $ name和'edit' = $ id。總是把你的路線放在最後一個參數上,首先用靜態文本路由。您也可以在路線上執行過濾器或where子句,如下面的一些答案 – Carlos

回答

1
Route::get('members/{name?}/{id}', '[email protected]'); 

這兩個URL對laravel來說都是一樣的,在這種情況下,$ name被設置爲「1」,$ id被設置爲「edit」。 您需要通過可選的參數移動到末尾 和狀態文本一級回來了,在這種情況下,爲了避免歧義:

Route::get('members/edit/{id}', '[email protected]'); 
Route::get('members/{id}/{name?}', '[email protected]'); 
0

它不符合任何特定約束驗證名稱或ID,因此您/ 1 /編輯符合條件...使用相同的路徑定義,您可以簡單地顛倒定義的順序。

4

您需要添加路由where條件參數。首先,我quess是刺,第二次爲整數:

Route::get('members/{name?}/{id}', '[email protected]')->where([ 
    'name' => '[a-z]+', 
    'id' => '[0-9]+', 
]); 
Route::get('members/{id}/edit', '[email protected]')->where([ 
    'id' => '[0-9]+' 
]); 
0
 Route::get('/post-delete/{post_id}',[ 
'uses' => '[email protected]', 
'as' => 'post.delete', 
'middleware' => 'auth' 
]); 

我的控制器是這樣

public function getDeletePost($post_id) 
{ 
    $post = Post::where('id',$post_id)->first(); 
    if(Auth::user() != $post->user) 
    { 
     return redirect()->back(); 
    } 
    $post->delete(); 
    return redirect()->route('dashboard')->with(['message' => 'Sucessfully Deleted Taunt']); 
} 

和我blade.php是這樣

<a href="{{ route('post.delete',['post_id' => $post->id]) }}">Delete</a> 

的上面的代碼是用於刪除uc的,請嘗試編輯它