Laravel 5.8 新特性系列 —— 支持策略类自动解析功能
Laravel 作者 Taylor Otwell 近日在 Twitter 宣布,从 Laravel 5.8 开始,只要策略类和对应模型类在 Laravel 框架默认约定的位置,就可以自动解析,而不必在 AuthServiceProvider
类中显式注册:
如果你定义的模型类或策略类不在默认约定的目录下,可以通过 Gate
自定义用于「查找」策略类的策略猜测逻辑:
Gate::guessPolicyNamesUsing(function ($class) {
// 具体业务逻辑
return $policyClass;
});
在 Laravel 5.7 及以下版本中,我们是通过在 AuthServiceProvider
类中配置模型类与对应策略类的映射关系数组 $policies
来判定使用的策略类:
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy'
];
在 Laravel 5.8 中,对于之前已经定义的映射关系,你当然可以继续保持这种实现机制,不过,当你创建新的策略类的话,如果模型类和对应策略类都在框架默认约定的路径下,则不必再添加额外的映射关系到这个配置数组。
如果你对这一功能特性实现的底层源码感兴趣,可以查看 GitHub 上的相关代码提交记录:
- first pass at guessing policy from class
- add tests for policy resolution
- allow registration of guesser callback
注:本文翻译整理自 Laravel News,原文链接:https://laravel-news.com/automatic-policy-resolution-laravel-5-8。
1 Comment
666