解决 Entrust 的 Trait 冲突
程序员文章站
2022-06-13 18:36:56
...
因为有朋友在问我 [ here], 而我之前也正好遇到过,所以记录下。
当使用的多个 trait中包含了相同的方法名,将会发生冲突,冲突错误信息如下
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
和 SoftDeletes 的 restore 冲突
由于 EntrustUserTrait和 SoftDeletes两个 trait都包含 restore方法,所以当我们对用户 Model 使用软删除的时候同时集成 Entrust的时候就会导致冲突。
解决方法就是引用两个 trait时为 restore方法设置别名,然后重写一个 restore方法,分别调用两个 restore方法。代码如下:
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 - Trait method can has not been applied, because there are collisions with other trait methods on App\User
推荐阅读
-
Android中DrawerLayout+ViewPager滑动冲突的解决方法
-
铁路12306行程冲突怎么办? 12306提示行程冲突的解决办法
-
Android ViewPager的事件冲突的解决办法
-
VMware和XAMPP同占用443端口发生冲突导致无法使用的解决办法图解
-
innodb_index_stats导入备份数据时报错表主键冲突的解决方法
-
Android ListView与ScrollView冲突的解决方法总结
-
wifi精灵与闪讯冲突的详细解决办法
-
Android之ScrollView嵌套ListView和GridView冲突的解决方法
-
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
-
解决自定义$(id)的方法与jquery选择器$冲突的问题