ホームページ > バックエンド開発 > PHPチュートリアル > Entrust での特性の競合を解決する

Entrust での特性の競合を解決する

WBOY
リリース: 2016-06-20 12:37:02
オリジナル
1204 人が閲覧しました

友達が【ここ】に質問してきたので、以前たまたま遭遇したので記録しました。

使用される複数のトレイトに同じメソッド名が含まれている場合、競合が発生します。 競合エラー メッセージは次のとおりです。

FatalErrorException in User.php line 43:  Trait method xxxxxx has not been applied, because there are collisions with other trait methods on App\Http\models\User  
ログイン後にコピー

SoftDelete の復元と競合します

Due EntrustUserTrait と SoftDeletes の両方の特性に復元メソッドが含まれているため、ユーザー モデルで論理的な削除を使用し、同時に Entrust を統合すると、競合が発生します。

解決策は、2 つの特性を参照するときに復元メソッドのエイリアスを設定し、復元メソッドを書き換えて 2 つの復元メソッドをそれぞれ呼び出すことです。コードは次のとおりです。

class User extends Model implements AuthenticatableInterface  {    use Authenticatable;    use EntrustUserTrait { restore as private restoreA; }    use SoftDeletes { restore as private restoreB; }    /**     * 解决 EntrustUserTrait 和 SoftDeletes 冲突     */    public function restore()    {        $this->restoreA();        $this->restoreB();    }}
ログイン後にコピー

Authorizable の can と競合します

解決策は、EntrustUserTrait の can メソッドをエイリアスに変更し、Authorizable で can を使用することです。コードは次のとおりです

use Authenticatable, CanResetPassword, PresentableTrait, Authorizable, EntrustUserTrait {      EntrustUserTrait::can as may;    Authorizable::can insteadof EntrustUserTrait;}
ログイン後にコピー

参考: Laravel 5.1.11 - AppUser で他の特性メソッドと衝突があるため、特性メソッドは適用されていません

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート