欢迎各位兄弟 发布技术文章
这里的技术是共享的
当使用的多个 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 { EntrustUserTrait::restore as private restoreA; }
- use SoftDeletes { 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;
- }
来自 https://blog.csdn.net/chajinglong/article/details/72729956
因为有朋友在问我 [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
由于 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();
}
}
解决办法是将 EntrustUserTrait
的 can
方法改一个别名,然后使用 Authorizable
中的 can
,代码如下
use Authenticatable, CanResetPassword, PresentableTrait, Authorizable, EntrustUserTrait {
EntrustUserTrait::can as may;
Authorizable::can insteadof EntrustUserTrait;
}
来自 https://learnku.com/laravel/t/1775/resolve-entrust-trait-conflicts