Laravel 5.8 模型策略自动解析示例


Laravel 5.8 版本之前,模型和策略之间的关系需要显示的进行绑定

// /app/Providers/AuthServiceProvider.php
protected $policies = [
    'App\User' => 'App\Policies\UserPolicy',
];

5.8 引入模型策略自动发现机制,但需要遵循一定的规范,即策略类都必须位于模型类所在目录的Policies 目录中。例如 App\User 对应 App\Policies\UserPolicy,如果是 App\Models\User 的话,就需要对应 App\Models\Policies\UserPolicy

有的人习惯将模型和策略的目录都放在 app 下,即 App\Policies 对应策略,App\Models 对应模型,这样做是不符合 5.8 支持的解析规范的。这种情况下,可以通过 Gate::guessPolicyNamesUsing 来进行自定义解析

// /app/Providers/AuthServiceProvider.php

use Illuminate\Support\Facades\Gate;

public function boot()
{
    $this->registerPolicies();

    Gate::guessPolicyNamesUsing(function($modelName){

        $name = class_basename($modelName).'Policy';

        return "App\\Policies\\{$name}";
    });
}


点赞 取消点赞 收藏 取消收藏

<< 上一篇: Leetcode之PHP版题目解析(217. Contains Duplicate)

>> 下一篇: Leetcode PHP题解--D5 804. Unique Morse Code Words