php - 如何将 laravel 路由函数结构化以创建动态路由?
问题描述
假设我有一个模型、名为 item、items 的表
+----+-------------+
| id | name |
+----+-------------+
| 1 | Burger |
| 2 | Large Pizza |
+----+-------------+
我希望我的路线功能(至极生成路线)自动生成路线。
示例路线功能
Route::get('item/{item}', itemController@getitem)->name('item');
这就是它返回的内容
route('items',['item' => 1]) => mysite.com/item/1
route('items',['item' => 2]) => mysite.com/item/2
这就是我需要它返回的东西
route('items',['item' => 1]) => mysite.com/item/burger
route('items',['item' => 2]) => mysite.com/item/large-pizza
我想添加一个这样的功能
function getItemLink($item){
$item = Item::find($item);
return env('APP_URL').'/item/'.strtolower(str_replace(' ','-',$item.name);
}
PS:- 我不想更改调用函数route('items',['item' => 1])
,但我可以更改路由文件中的代码。原因是,该功能遍布整个位置。
解决方案
你应该
- 创建将在表中添加一
slug
列的迁移 - 用
slug
_Str::slug($item->name)
- 告诉 Laravel 你想通过
slug
字段检索你的模型
// YourModel.php
public function getRouteKeyName()
{
return 'slug';
}
- 更改您的链接生成线
route('items',['item' => $item])
我知道你讨厌最后一点,但这是必要的。Laravel 已经知道如何使用路由和绑定来构建链接
最后一点,如果你想切换回带有 id 的链接,你只需getRouteKeyName()
要从你的模型中删除该方法。
推荐阅读
- javascript - 提供的目标原点 ('
') 不匹配收件人窗口的来源 (' ') - elasticsearch - 如何在 Logstash Elasticsearch 中编写 while 循环
- .net - 数据库恢复失败(错误详细信息:用户“sa”登录失败)请查看安装指南以完成 candela 安装
- django - Docker 中的 Django:GNU gettext 工具是否仅在开发中需要?
- php - DocuSign:多个收件人,一个签名
- php - 当 Route::fallback 存在时检查路由是否存在
- python - Pandas 添加一个带有字符串的新列,其中单元格匹配特定条件
- docker - .NET Core 2.0 Docker 映像缺失和向后兼容性
- ios - SwiftUI 多个垂直列表行动画不起作用
- android - 事件将在 10 秒内从谷歌日历中删除:Android