Laravel路由可选参数问题

时间:2016-09-21 12:34:37

标签: laravel routes blade restful-url

我的路线是:

Route::get('members/{name?}/{id}', 'Sample1Controller@sampleFn1');
Route::get('members/{id}/edit', 'Sample2Controller@sampleFn2');

当我点击刀片上的网址链接时,

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

它转到第一个路径并调用Sample1Controller @ sampleFn1。为什么??请帮忙..

当我点击链接时..我想去第二条路线并调用Sample2Controller @ sampleFn2。有什么帮助吗?

提前致谢。

5 个答案:

答案 0 :(得分:4)

您需要将条件添加到参数的条件。首先我讨论的是叮咬,第二个是整数:

Route::get('members/{name?}/{id}', 'Sample1Controller@sampleFn1')->where([
    'name' => '[a-z]+',
    'id' => '[0-9]+',
]);
Route::get('members/{id}/edit', 'Sample2Controller@sampleFn2')->where([
    'id' => '[0-9]+'
]);

答案 1 :(得分:1)

Route::get('members/{name?}/{id}', 'Sample1Controller@sampleFn1');

对于laravel,两个URL看起来都相同,在这种情况下,$ name被设置为&#34; 1&#34;并且$ id被设置为&#34;编辑&#34;。 您需要通过将可选参数移动到最后来避免歧义 并且状态文本返回一级,在这种情况下:

Route::get('members/edit/{id}', 'Sample2Controller@sampleFn2');
Route::get('members/{id}/{name?}', 'Sample1Controller@sampleFn1');

答案 2 :(得分:0)

它没有针对任何特定约束验证名称或ID,因此您/ 1 / edit符合条件......使用相同的路径定义,您可以简单地颠倒定义的顺序。

答案 3 :(得分:0)

尝试以下方法:

Route::get('members/{id}/edit', 'Sample2Controller@sampleFn2');
Route::get('members/{name?}/{id}', 'Sample1Controller@sampleFn1');

答案 4 :(得分:0)

      Route::get('/post-delete/{post_id}',[
'uses' => 'PostController@getDeletePost',
'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>

以上代码用于删除,请尝试编辑