Laravel 5.8 新特性系列 —— 支持策略类自动解析功能


Laravel 作者 Taylor Otwell 近日在 Twitter 宣布,从 Laravel 5.8 开始,只要策略类和对应模型类在 Laravel 框架默认约定的位置,就可以自动解析,而不必在 AuthServiceProvider 类中显式注册:

Laravel 5.8 新特性

如果你定义的模型类或策略类不在默认约定的目录下,可以通过 Gate 自定义用于「查找」策略类的策略猜测逻辑:

Gate::guessPolicyNamesUsing(function ($class) {
    // 具体业务逻辑
    return $policyClass;
}); 

在 Laravel 5.7 及以下版本中,我们是通过在 AuthServiceProvider 类中配置模型类与对应策略类的映射关系数组 $policies 来判定使用的策略类:

protected $policies = [
    'App\Model' => 'App\Policies\ModelPolicy'
];

在 Laravel 5.8 中,对于之前已经定义的映射关系,你当然可以继续保持这种实现机制,不过,当你创建新的策略类的话,如果模型类和对应策略类都在框架默认约定的路径下,则不必再添加额外的映射关系到这个配置数组。

如果你对这一功能特性实现的底层源码感兴趣,可以查看 GitHub 上的相关代码提交记录:

注:本文翻译整理自 Laravel News,原文链接:https://laravel-news.com/automatic-policy-resolution-laravel-5-8


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: Laravel 5.8 新特性系列 —— 编译后的 Blade 模板引入编译前模板文件路径以便调试

>> 下一篇: Laravel 5.8 新特性系列 —— 废弃全局的字符串和数组相关辅助函数