Laravel:基于路由模型绑定生成带跳转路由的按钮
解决Laravel中域名+分类的路由跳转按钮实现问题
嘿,我来帮你搞定这个跳转按钮的实现~你已经做对了核心的配置:路由定义、模型设置getRouteKeyName用slug作为路由键,这部分完全没问题。接下来给你两种靠谱的实现方式,按需选择:
方式一:直接传模型实例(推荐)
因为你已经在Domain和Category模型里指定了用slug作为路由键,Laravel会自动帮你解析模型对应的slug值,不需要手动拼接。这种写法更简洁,而且后续如果修改路由键规则,视图代码完全不用改,维护性拉满:
<li class="nav-item p-2"> <a href="{{ route('website.category.show', ['domain' => $domain, 'category' => $category]) }}" class="btn btn-outline-success"> {{ $category->name }} <!-- 替换成你要显示的分类名称文本 --> </a> </li>
方式二:手动传slug(兼容你的原有写法)
如果你更习惯手动传递slug值,只要确保这两点就没问题:
- 你的
$domain和$category对象确实存在slug属性(数据库里有这个字段,并且模型里没有隐藏它) - 路由参数名和数组键名完全匹配(你路由里是
{domain}和{category},数组里的键也是domain和category,这部分你已经写对了)
另外注意你原有代码里的小笔误:btn-outline-succes少了一个s,应该是btn-outline-success,这个会影响按钮样式哦。修正后的代码如下:
<li class="nav-item p-2"> <a href="{{ route('website.category.show', ['domain' => $domain->slug, 'category' => $category->slug]) }}" class="btn btn-outline-success"> {{ $category->name }} </a> </li>
验证方法
你可以在视图里临时输出路由生成的URL,确认是否符合预期:
{{ route('website.category.show', ['domain' => $domain, 'category' => $category]) }}
正常应该生成类似 http://your-site.com/your-domain-slug/your-category-slug 的链接。
最后提醒一句:确保Domain和Category模型的slug字段是唯一的,不然Laravel解析路由时会匹配到第一个符合slug的模型,可能导致跳转错误哦~
内容的提问来源于stack exchange,提问作者Iurie Albu
相关产品推荐
相关产品推荐

