文档章节

解决 Entrust 的 Trait 冲突

mylegendary
 mylegendary
发布于 2017/02/14 18:11
字数 271
阅读 11
收藏 0
点赞 0
评论 0

当使用的多个 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://laravel-china.org/topics/1775

共有 人打赏支持
mylegendary
粉丝 0
博文 14
码字总数 2994
作品 0
静安
程序员
PHP中实现代码复用的Trait方法的一些特性

在整理“PHP基础”这篇文档时,看到了trait方法,感觉比较陌生,所以今天上午用两个小时的时间,查阅测试了trait方法的一些特性及用法,整理发布了这篇博客。 Trait 是 PHP5.4 中的新特性,是...

尘世如潮 ⋅ 2016/04/12 ⋅ 0

PHP之Traits

【PHP之Traits】  1、Traits基础      2、优先级:当前类中的方法会覆盖 Trait 方法,而Trait方法覆盖了基类中的方法。   3、多个Traits,使用use声明列出多个Traits。      4、...

行走的螃蟹 ⋅ 2016/08/24 ⋅ 0

php中的traits详解

PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法。php的Traits和Go语言的组合功能类似,通过在类中使用use关键字声明要组合的Trait名称,而具体某个...

stone_ryan ⋅ 2017/05/10 ⋅ 0

PHP trait使用

php使用关键字trait php只能继承一个父类,但是,使用trait,类可以使用多个方法来实现想要做的事情,相当于实现多继承。 当中的方法和类中的方法相同的时候,优先级的顺序是类中的方法会将中的方...

eatnothing ⋅ 2016/08/09 ⋅ 0

Groovy 2.3 trait语法介绍

Groovy 2.3 trait语法介绍 http://www.javacodegeeks.com/2014/04/groovy-2-3-introduces-traits.html 前几天,Groovy 2.3的第二个beta版本发布。Groovy 2.3最重要的新特性之一是trait语法。...

翟志军 ⋅ 2014/04/29 ⋅ 4

PHP简明教程-面向对象基础 2

PHP简明教程 面向对象基础 2 其他的几个魔术方法 方法名 触发时机 参数1 参数2 备注 callStatic 当调用不存在的静态方法的时候自动执行这个方法 函数名 参数(数组) 该方法必须是static slee...

栗子boomboomboom ⋅ 2017/07/03 ⋅ 0

php trait 简明教程,多重继承的实现方案

http://php.net/manual/en/language.oop5.traits.php 自PHP5.4.0起,PHP实现了代码复用的一个方法,称为traints。 Traits是一种为类似PHP的单继承语音而准备的代码复用机制。Trait为了减少单...

雪之丞 ⋅ 2016/03/28 ⋅ 0

【翻译】Traits in PHP

Trait 本质上是无状态的mixin,是PHP解释器自动完成的『粘贴&拷贝』,区别于继承,它提供的重用是水平性的,很好地提高了代码的可重用。然而错误使用会造成冲突,BUG难以调试。先来看看 trai...

amoroso1860 ⋅ 04/04 ⋅ 0

Rust的多继承和mixin机制

先上一段Rust代码: 给java和php的童鞋的解释就是:两个接口A和B,一个类S,S分别针对A和B实现了say()这个方法。 因为这在java或php(抄袭java的面向对象)是不可能的,万恶的根源在于他们是将...

__JM_Joy__ ⋅ 2016/05/23 ⋅ 0

【laravel-amount】Model 中自动转换金额的 Trait

背景 系统中涉及到金额的字段,View 层表现的时候一般都是以元为单位使用小数形式展示,不过 Domain 层存储时从空间、性能、容错角度出发,经常以分为单位,用整型来存储。 在 Lavarel 中,可...

haolisand ⋅ 2016/09/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

个人博客的运营模式能否学习TMALL天猫质量为上?

心情随笔|个人博客的运营模式能否学习TMALL天猫质量为上? 中国的互联网已经发展了很多年了,记得在十年前,个人博客十分流行,大量的人都在写博客,而且质量还不错,很多高质量的文章都是在...

原创小博客 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(十一)JavaScript的DOM操作

JavaScript零基础入门——(十一)JavaScript的DOM操作 大家好,欢迎回到我们的JavaScript零基础入门。最近有些同学问我说,我讲的的比书上的精简不少。其实呢,我主要讲的是我在开发中经常会...

JandenMa ⋅ 今天 ⋅ 0

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 今天 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 今天 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 今天 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部