如何在路由中设置2种参数

现在需要实现的地址是 display-1-0-0.html
第一个1:话题(栏目)
第二个0:话题的分类
第三个0:翻页码
现在先抛开翻页吗不说。

想实现的一个功能是:如果当前的话题不存在分类。那么地址栏是0.从话题列表里点击了某个分类,第二个0就替换成对应的分类的id。
路由里的写法是:

Route::get('display-{articletopic:id}-{articletype:id}.html', [App\Http\Controllers\DisplayController::class, 'show'])->name('display.show');

控制器里也用了话题和分类的模型。(话题模型1对多也绑定了分类的模型)

    public function show(ArticleTopic $articletopic, ArticleType $articletype)
    {
        return view('display.show', compact('articletopic'));
    }

然后就是在视图里,默认的地址是

<a href="{{ route('display.show', [$articletopic->id, '0']) }}">

如果是分类的地址是

@foreach($articletopic->ArticleTypes()->get() as $Type)
                            <li>
                                <a href="{{ route('display.show', [$articletopic->id, $Type->id]) }}">{{ $Type->name }}</a>
                            </li>
                        @endforeach

现在访问带分类的。也就是
display-1-1.html
display-1-2.html
是没问题的。但是 display-1-0.html 这里就是404.他应该是默认不带分类的整个话题的列表。在a标签里也给了一个 0作为传路由的参数,我能理解是因为分类的模型里查询不到0这个id。所以报错,
所以这里应该怎么解决呢?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
Mutoulee
最佳答案
show(ArticleTopic $topic, ArticleType $type)
1年前 评论
ISeee (楼主) 1年前
讨论数量: 8
Mutoulee
php artisan route:list 

看下路由

1年前 评论

错误好像有几个来着。你提的变量有几个,路由设置的时候就需要放几个变量,看你的路由设置就少了分页的变量。
控制器注入的是路由设置的变量而不是模型,注入的是模型你怎么来确认路由来的变量来查询的。
控制器注入拿取的是路由设置的变量

1年前 评论
ISeee (楼主) 1年前
Mutoulee
show(ArticleTopic $topic, ArticleType $type)
1年前 评论
ISeee (楼主) 1年前
Mutoulee

但是 display-1-0.html 这里就是 404. 他应该是默认不带分类的整个话题的列表 路由里的参数是模型注入的,你输入0那肯定是找不到type的模型,肯定是要404的啊; 你可以试试路由参数约束:路由《Laravel 9 中文文档》

1年前 评论
ISeee (楼主) 1年前
Mutoulee (作者) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!