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}";
});
}

No Comments