2016-09-21 151 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的,请尝试编辑它