大家好,我是 Laravel 的新手,目前我正在尝试将一个 slugged url 传递到我的控制器中,但我遇到了问题。我有一个类别表,所有类别都循环并显示在视图页面(/帖子)上。我在此视图中列出了所有类别,以便当用户单击某个类别时,他们将被带到另一个页面,显示属于该类别的所有帖子(例如,/posts/category/{categoryID})。我知道我可以通过将类别 id 传递到控制器并找到 id 传递回该视图来完成此操作。然而,我正在尝试做一些不同的事情。我希望将类别名称而不是 id 传递给控制器。例如,/posts/category/{类别名称}。但由于有些类别不仅仅是一个词(例如干洗),这对我来说是一个挑战。我之前出于 SEO 目的而使用了 URL(例如 /posts/category/{Str::str(categoryname)}),并从 web.php 文件中创建了一条 get 路由。现在,我想获取与传入的类别名称相关的所有帖子。问题是类别名称被打乱。有没有办法从传递到控制器的名称中删除slug(“-”或连字符)?因此,它将返回为与数据库中的名称匹配的“干洗”,而不是“干洗”。我试图避免将 id 传递给 url。
1 回答
慕标琳琳
TA贡献1830条经验 获得超9个赞
好问题。
您可以使用多种方法来解决此问题。我会为你详细介绍一下。
1. 将slug存储到数据库中
一种选择是将 slug 名称存储在数据库中。就我个人而言,这是我最喜欢的选项,因为您不需要进行任何字符串转换。通过这种方法,我会slug
在您的类别表中放置一列。然后,您可以使用类别雄辩模型来搜索具有该 slug 的类别。
2. 将 slug 转换为标题大小写
第二个选项是将 slug 转换为标题大小写。您可以使用 Laravel 的 string 类来做到这一点。例如:
$categoryName = Str::title($slug);
然而,这种方法存在一些问题。首先,创建 slug 时,url 将删除不安全的字符,例如撇号。这意味着,如果您有复数类别名称,则在将 slug 转换回标题大小写时,它将不匹配。
其次,通过使用代码转换字符串以匹配数据库中的记录,您将受到服务类的支配。虽然功能Str::title
不太可能改变,但从理论上讲,这可能意味着您必须稍后更改代码。
结论
总的来说,我建议采用第一种方法。您可以获得更好的数据完整性,并且进一步减少出现问题的可能性。因此,如果我是您,我会创建一个新的迁移,将一列添加slug
到您的类别表中,然后使用自己的 slug 填充每个类别。然后在查询你的 Eloquent 模型时根据slug
列搜索类别。
- 1 回答
- 0 关注
- 80 浏览
添加回答
举报
0/150
提交
取消