確認環境
- Laravel 5.6
- PHP 7.1
問題
何もせずに使うと次のようなエラーに遭遇する。
Type error: Argument 1 passed to Barryvdh\Debugbar\DataCollector\GateCollector::addCheck() must be an instance of Illuminate\Contracts\Auth\Access\Authorizable or null, instance of <独自クラス名> in <アプリケーションへのパス>/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php on line 374
解決策
認可の仕組みである Gate, Policy を使うためには Illuminate\Contracts\Auth\Access\Authorizable
という interface を実装している必要がある。
この実装は Illuminate\Foundation\Auth\Access\Authorizable
という trait が存在するので、これを use
してあげればよい。
<?php
// Authorizable という名前が被っているので AuthorizableContract とする
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Foundation\Auth\Access\Authorizable;
class User implements AuthorizableContract
{
use Authorizable;
// ...以下略
}
参考
-
公式ドキュメント Authorization
- Authorizable についての記載は無い
- Eloquent Model での実装(デフォルトのやつ)