2016-09-21 2 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を呼び出します。なぜ??助けてください..

私はリンクをクリックします。私は2番目のルートに行きたいとSample2Controller @ sampleFn2を呼び出します。どんな助け?

ありがとうございます。

+0

あなたは 'メンバー/ 1/edit'を訪問するとき、それはどちらかのルートを一致させることができますので、あなたはそこにいて、最初のもの、 '1' = $ nameと' edit' = $ idを選びます。パラメータは最後に、ルートは静的テキストで始めるようにしてください。また、以下の回答のように、経路上のフィルタや場所を指定することもできます – Carlos

答えて

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

URLは両方ともlaravelと同じに見えます。この場合、$ nameは "1"に設定され、$ idは "edit"に設定されています。 あなたはこのような場合には、バックエンド とステータステキスト1レベルにオプションのパラメータを移動することによって、あいまいさを避けるために必要があります。

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

特定の制約に対して検証されていないので、/ 1/editは同じルート定義を使用するために定義の順序を逆にすることができます。

4

あなたはどこ条件のパラメータへのルートを追加する必要があります。

Route::get('members/{name?}/{id}', '[email protected]')->where([ 
    'name' => '[a-z]+', 
    'id' => '[0-9]+', 
]); 
Route::get('members/{id}/edit', 'Sample2Con[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> 

のようなものです:まず私は、刺されのために整数の秒ですquess上記のコードは削除のためのものです。編集のために試してください