Laravel 重定向到错误的路线

Posted

技术标签:

【中文标题】Laravel 重定向到错误的路线【英文标题】:Laravel redirecting to the wrong route 【发布时间】:2021-12-17 10:11:52 【问题描述】:

web.php

 Route::get('/gigs/id', [GigsController::class, 'info'])->name('clientside.gigs_info');

Route::get('/gigs/create', [GigsController::class, 'create'])->name('clientside.gigs.create');

控制器

public function create()

    $categories = Category::select('id', 'name')->get();

    return view('clientview.gigs.create', compact('categories'));



public function info($id)



    $gig = Gigs::join('users', 'users.id', '=', 'gigs.created_by')
        ->join('categories', 'categories.id', '=', 'gigs.category_id')
        ->select('gigs.*', 'categories.name as category_name', 'users.name as user_name', 'users.surname')
        ->where('gigs.id', '=', $id)
        ->orderBy('name', 'ASC')
        ->firstOrFail();

    return view('clientview.gigs.info', compact('gig'));

当我尝试点击这个时:

<a class="dropdown-item" href=" route('clientside.gigs.create') ">Create Gigs</a>

当我点击这个时,我可以从 DebugBar 观察到它指向路由('clientside.gigs_info') 我认为“/create”认为它是 /ID,但是,我指向不同的路线

【问题讨论】:

您希望静态命名路由高于动态路由。例如/gigs/create/gigs/id 之前,否则应用程序无法知道create 不是“id” @MichaelMano 谢谢你的回答,你是对的。 您可以使用路由实例上的 where 方法来限制路由参数的格式。 laravel.com/docs/8.x/… 【参考方案1】:

迈克尔·马诺的回答, 确保在动态之前写在 web.php 静态路由上。

【讨论】:

【参考方案2】:

在 info 路由之前写 create route 因为它是动态路由(接受参数)所以总是在静态路由之后写动态路由。

【讨论】:

【参考方案3】:

您实际上创建了一个动态路由 gigs/id,因此 gigs 之后的任何内容都将被称为 gigs 的参数。因此,要解决此问题,请更改 web.php 中的顺序,如下所示。所以它会先搜索静态路由,然后再去动态路由。

Route::get('/gigs/create', [GigsController::class, 'create'])->name('clientside.gigs.create'); Route::get('/gigs/id', [GigsController::class, 'info'])->name('clientside.gigs_info');

【讨论】:

以上是关于Laravel 重定向到错误的路线的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4如何检查一条路线是不是仅来自另一条路线/重定向?

提交表单 Laravel 后重定向到不同的路由

在我的 laravel 4 和 angularjs 应用程序中从一条路线重定向到另一条路线

如何在 laravel jetstream 中重定向?

Laravel 7 重定向登录授权

重定向到资源路由时路由不存在[Laravel]