您的位置:首页 > 移动开发

Laravel 5 - Trait method can has not been applied, because there are collisions with other trai

2017-05-25 16:12 1661 查看


1、Laravel 5 - Trait method can has not been applied, because there are collisions with other trait methods on App\User?

当使用的多个 
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;
}


2、RevisionableTrait conflicts with EntrustUserTrait?

然而EntrustUserTrait 中与RevisionableTrait 中的boot 重复造成 RevisionableTrait conflicts with
EntrustUserTrait 的原因,解决办法

在user.php model 中可以使用
class User extends Authenticatable

{

    use Notifiable;

    use HasApiTokens;

    use RevisionableTrait;

    use EntrustUserTrait { 

        EntrustUserTrait::restore insteadof SoftDeletes;

        EntrustUserTrait::boot insteadof RevisionableTrait;

        }

    use SoftDeletes;

}

3、Trait method boot has not been applied,
because there are collisions with other trait methods on App\Models\User?

 
如果抛出了上面的 错误,就是boot重复了,可以看看第二个问题
4、The thing that bothers me is
that I don't have deleted_at column in my user table?

如果出现deleted_at 错误,就是数据库少了deleted_at字段,你可以新增一个migration,添加这个字段
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐