如何在没有范围的情况下在 laravel 路由中使用自定义键?
Posted
技术标签:
【中文标题】如何在没有范围的情况下在 laravel 路由中使用自定义键?【英文标题】:How to use custom keys in laravel routes without scoping? 【发布时间】:2020-06-24 13:47:59 【问题描述】:当使用自定义键时,Laravel 会强制我们进行范围界定,例如,我有一条获取国家和帖子的路线
api/countries/country:slug/posts/post:slug
但我无法使用 slug 键获得它,因为它与国家/地区没有关系,在这种情况下,我想自己处理范围,我不需要隐式范围绑定,但我收到错误(调用未定义的方法 App\Country::posts() )。 因此,我无法使用此 Laravel 功能。有没有办法关闭隐式范围绑定?
【问题讨论】:
请用你目前在代码中尝试过的更多解释一下,这个Call to undefined method App\Country::posts()
的意思是你还没有和国家模型类建立post关系
@Vipertecpro 我认为所有信息都在那里。使用自定义键时,嵌套路由参数由更高级别的参数“限定”。所以它试图找到一个作为国家孩子的职位;并且 OP 说模型不是这样嵌套的,所以它失败了。
【参考方案1】:
如果帖子与国家/地区无关,将它们嵌套在 URI 中可能没有意义?
但是,尽管如此,要回答您的问题,您需要做以下两件事之一:
-
不要设置 country:slug,只需使用 country,然后在 Country 和 Post 模型上覆盖
getKeyRouteName()
函数。
或者,特别是如果您想在其他地方使用 ID,请使用 explicit model binding.
在路由文件中使用没有自定义键的 slug
class Post
[...]
public function getRouteKeyName()
return 'slug';
使用显式路由模型绑定
将以下内容添加到 RouteServiceProvider 的 boot() 方法中:
public function boot()
parent::boot();
Route::bind('post', function ($value)
return App\Post::where('slug', $value)->firstOrFail();
);
【讨论】:
以上是关于如何在没有范围的情况下在 laravel 路由中使用自定义键?的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 SSH 的情况下在 GoDaddy 共享主机中托管 Laravel 5.2?
如何在 URL 中没有 # (哈希)的情况下在 Elm 中进行路由/导航?
如何在没有 Laravel 尝试将其保存到数据库的情况下在 Eloquent 模型中使用受保护的属性
Laravel:在没有 Eloquent 的情况下在视图中显示数据