我不想在Laravel项目的URL字段中显示/route_name/{id}
。而不是我希望显示/route_name/{name}
,而是将后端的id
传递给控制器。
假设我有一个名为departments
的路由,并将名为3
的id knee_pain
作为参数传递。它就像/departments/3
但我想在我的网址中显示/departments/knee_pain
,并希望在我的控制器中传递ID 3
而不在id
中显示url
。
怎么做?
答案 0 :(得分:1)
首先,你必须保证名称是唯一的,如果不是你的控制器中有多个Id。为此,我建议您使用净化器删除空格并使其URL友好: Purifier
第二,可能拥有干净控制器的最佳方法是创建一个中间件,了解什么类型的名称(中间件应该查找哪个表)。您可以通过路由名称验证并将正确的ID发送给控制器。
答案 1 :(得分:0)
在您的模型中,您可以使用 getRouteKeyName 方法绑定到路线中默认 ID 之外的其他属性:
public function getRouteKeyName()
{
return 'slug'; // Default is 'id'.
}
我建议使用url友好的属性,而不是使用你可以在应用程序的其他地方使用的name属性来显示条目的名称。你可以使用Str :: slug()来实现它。
public function setNameAttribute($value) {
$this->name = $value;
$this->slug = \Str::slug($value);
}
它将会摧毁'你的字符串,例如:\ Str :: slug('膝盖疼痛')=> '膝盖疼痛'
注意:在Laravel 5.5中,使用str_slug()帮助器。
您还应确保此字符串在您的数据库中是唯一的。