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