首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >同路不同控制器

同路不同控制器
EN

Stack Overflow用户
提问于 2022-04-26 13:31:50
回答 3查看 288关注 0票数 0

我试图使用相同的路线,但使用不同的控制器,但没有得到一个干净和好的解决方案,例如,我的意图是:

代码语言:javascript
代码运行次数:0
运行
复制
Domain.com/category-slug

Domain.com/article-slug

但是每个控制器都有不同的控制器,使用相同的结构路由不会到达预期的控制器,上面留下了我的web.php

代码语言:javascript
代码运行次数:0
运行
复制
Route::get('/', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/{category}', [App\Http\Controllers\QuestionController::class, 'index'])->name('category.list');

Route::get('/{slug}', [App\Http\Controllers\QuestionController::class, 'show'])->name('questions.show');

有没有人遇到同样的情况,以及如何处理?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-26 21:07:11

正如Laravel在这种情况下所说的,第二条路由将永远不会被访问,因为第一条路由将覆盖它,因此,我建议您只能检查即将到来的category,如果它与数据库中的任何类别不匹配,然后将请求重定向到下一条路径,因为它很可能匹配Article模型中的任何记录,或者在没有返回数据的情况下最终中止请求。

代码语言:javascript
代码运行次数:0
运行
复制
public function index($category)
{
   $data = \App\Models\Category::where('name', $category)->get();

    if (empty($data)) {
        return redirect()->route('questions.show', $category);
    }

    return view('index', compact('data'));
}
代码语言:javascript
代码运行次数:0
运行
复制
public function show($article)
{
   $data = \App\Models\Article::where('name', $article)->get();

    if (empty($data)) {
        abort(404, "NOT FOUND");
    }

    return view('show', compact('data'));
}
票数 0
EN

Stack Overflow用户

发布于 2022-04-27 06:53:22

无法通知系统,路径中给定的id属于类别或段塞,第一条路径将不让系统进入第二条路由。

代码语言:javascript
代码运行次数:0
运行
复制
Route::get('/', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/{category}', [App\Http\Controllers\QuestionController::class, 'index'])->name('category.list');

Route::get('/{slug}', [App\Http\Controllers\QuestionController::class, 'show'])->name('questions.show');

因此,修改它以添加id类型的前缀,如

代码语言:javascript
代码运行次数:0
运行
复制
Route::get('/', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('category/{category}', [App\Http\Controllers\QuestionController::class, 'index'])->name('category.list');

Route::get('slug/{slug}', [App\Http\Controllers\QuestionController::class, 'show'])->name('questions.show');

它看起来就像

代码语言:javascript
代码运行次数:0
运行
复制
Domain.com/category/1
Domain.com/slug/1
票数 1
EN

Stack Overflow用户

发布于 2022-04-26 13:38:25

我建议对这两种类型的代码片段使用一个控制器操作,以确定需要做什么,并将请求转发到相应的控制器操作。

https://symfony.com/doc/current/controller/forwarding.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72014883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档