Yii2 behavior运用】的更多相关文章

class ReturnDataTypeBehaviors extends Behavior { public $type = 'json'; public $pcOrMobile = 'pc'; // or mobile //控制器执行之后事件 public function events() { return [Controller::EVENT_BEFORE_ACTION => 'beforeType']; } /** * 返回数据类型判断 * @param $event * @retur…
我们先来看下行为在 Yii2 中的使用,如下内容摘自 Yii2中文文档 行为是 [[yii\base\Behavior]] 或其子类的实例.行为,也称为 mixins,可以无须改变类继承关系即可增强一个已有的 [[yii\base\Component|组件]] 类功能.当行为附加到组件后,它将"注入"它的方法和属性到组件,然后可以像访问组件内定义的方法和属性一样访问它们.此外,行为通过组件能响应被触发的事件,从而自定义或调整组件正常执行的代码. 定义行为 要定义行为,通过继承 [[yi…
Yii2.0中的一个思想就是组件化的思想,所以.大多数的类都直接或间接的继承自yii\base\Component,而组件的三大功能:属性.事件.行为. 行为的目的是为了方便的扩展一个类的功能,而不需要直接去修改这个类,同时行为中也附带了事件的实现. 1.整体的结构 Controller和模型ActiveRecord都继承自yii\base\Component 而Component继承自yii\base\Object Object中和Component中都实现了魔术方法__get和__set以及…
使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充.通过将行为绑定到一个类,可以使得类具有行为本身所具有的属性和方法,就好像是类本来就具有的这些属性和功能一样. 好的代码设计,必须要同时满足可复用性.可维护性和可扩展性.设计原则中有一条非常重要的一条:类应该对扩展开放,对修改关闭.改变原有代码往往会带来潜在风险,因此我们尽量减少修改的行为.我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可以搭配新的行为.如果能实现这样的目标,有什么好处呢?这样的设计具有弹性,可以…
YII2中的行为说白了就是对组件功能的扩展,在不改变继承关系的条件下. 行为附加到组件后,行为将注入自已的方法和属性到组件,可以像组件访问自定义的方法和属性一样访问行为. 注意行为是对功能的扩展,不要乱用行为,比如有一个动物类和一个人类,他们各自有自已的名称,身高,体重,这些是属性. 他们都会跑,这个时候我们就可以抽象出来做成一个跑的行为,根据不同需求来扩展他们. 这里我们有两个控制器一个GoodsController,一个OrderController,他们都接收请求,返回数据给客户端,不过有…
1. behaviors方法的调用: 在祖先对象components中有一个ensureBehaviors方法,代码如下: /** * Makes sure that the behaviors declared in [[behaviors()]] are attached to this component. */ public function ensureBehaviors() { if ($this->_behaviors === null) { $this->_behaviors…
Behavior类是所有事件类的基类,它继承自object类 Behavior类的前面注释描述大概意思: * Behavior类是所有事件类的基类 * * 一个行为可以用来增强现有组件的功能,而不需要修改它的代码. * 用来增强现有组件的功能而不修改它的代码.它可以添加自己的方法和属性组件 * 使他们可以直接通过组件访问.还可以响应组件触发的事件,拦截正常的代码执行. class Behavior extends Object { /** * 要附加行为对象的组件 */ public $owne…
本文改进了Yii2中内置行为类TimestampBehavior,使得时间戳字段(如created_at,updated_at) 完全自己更新,方便得让你忘记它们的存在. Yii2的内置行为类TimestampBehavior几乎成了各种介绍Yii2行为的常客.各种讲解行为的文章中都少不了它的身影,它甚至登堂入室,被Yii2官方文档采用了.它的标准用法--虽然大家都知道--但我也贴出来: class User extends ActiveRecord { // ... public functi…
Yii2 默认开启csrf校验,但是有些时候确实不需要校验,比如对外提供API 一般做法直接在xxController中增加属性: public $enableCsrfValidation = false; 但是这样整个xxController都失去了校验,开发中又只是希望某一个action禁用 在components下建文件NoCsrf.php, 内容: class NoCsrf extends Behavior { public $actions = []; public $controll…
想要了解 Yii2 的话,一定要对 Yii2 中相关类的继承关系有所了解.由于暂时读的代码有限,下面的图中只列出了部分继承关系,之后回跟着源码阅读的越来越多而增加 由上图可以看到 Yii2 中大多数类都继承自 yii\base\Object,实现了属性的功能. yii\base\Component yii\base\Event 和 yii\base\Behavior 都继承了 yii\base\Object,yii\base\Component 是一个实现了属性/事件和行为功能的基础类,yii\…
属性: public function __get($name) // 这里$name是属性名 { $getter = 'get' . $name; // getter函数的函数名 if (method_exists($this, $getter)) { return $this->$getter(); // 调用了getter函数 } elseif (method_exists($this, 'set' . $name)) { throw new InvalidCallException('G…
Controller控制器类,是所有控制器的基类,用于调用模型和布局. <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ namespace yii\base; use Yii; /** * Controller is the base class for…
Action是所有控制器的基类,接下来了解一下它的源码.yii2\base\Action.php <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ namespace yii\base; use Yii; /** * Action is the base…
Behvaior类,Behavior类是所有事件类的基类: 目录yii2\base\Behavior.php <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ namespace yii\base; /** * Behavior is the base c…
缘起 因为一个月的短暂停留,我在给朋友搞事情,所以Yii系列的文章耽搁了很长时间,现在又重拾当时的知识,给大伙好好撸下这一系列的博客 提起Yii,虽然是国外的开发者搞的,但是它的作者是华人,这才是让我们引以为豪的,如果以后有机会薛强回国大力发展PHP事业,我肯定回去他麾下搞事情,为PHP在国内的发展贡献自己的一份力,虽然现在没有这个能力,这不薛强没回来嘛,回来的话那时的我肯定可以的~哈哈哈~ 领英上强哥的背景如下: 职务:MicroStrategy 公司担任构架师 地址:美国首都华盛顿 Metr…
写代码需要站在巨人的肩膀上,将主要精力集中在自己所需要实现的业务上面,避免反复搭建基础服务,重复造轮子.PHP框架就是这样一些巨人的"肩膀",使得我们"站"得更高,"看"得更远.像PHP本身有着不断迭代和升级的历史一样,PHP框架也有着自己的发展历史,从简单到复杂,从低级到高级,从面向过程到面向对象. 目前,比较流行的是以Laravel5.2+,Yii2,ZendFramework2.0,Symfony2等为代表的新一代框架.这一些框架,普遍和自…
学习任何一门学问,往往都是从起基本的概念学起.万丈高楼平地起,这些基本概念就是高楼的基石,必须做详尽的分析.我们知道,Yii2是一款脉络清晰的框架,理顺了基础的概念和基本功能,学习更高级和复杂的功能就容易多了.Yii2是一款纯面向对象的框架,它对类的功能做了扩充:PHP类的功能分为属性和方法,而Yii2定义了类的三个功能:属性(property),行为(behavior)和事件(event). 为了更好的实现面向对象的编程,拿到一个现实的对象,要构造一个PHP对象与之对应,如果用Yii2框架去实…
yii2的下载安装 使用下载好的文件配置高级模板,在配置文件配置好数据库和gii 在common模板配置db: 在backend模板配置gii: 配置nginx服务器访问backend和frontend: server { root C:/Users/liudaoqiang/project/manhua_yii2/frontend/web/; index index.php index.html; server_name dev.manhua_yii2_frontend.com; # set $…
什么是软删除 后台操作,删除一条记录,不希望真正的从数据库中删除,用个字段标记一下.比如delete_at.默认0.当执行删除操作,更新delete_at为当前时间戳 这样列表显示的时候只查询delete_at为0的记录. 牵涉到Yii2的中的操作 引入SoftDeleteBehavior文件 <?php namespace common\behavior; use yii\base\Behavior; use yii\base\Event; use yii\db\ActiveRecord; c…
知乎上有个类似的问题:http://www.zhihu.com/question/22924271/answer/23085751 大致思路不会变,开发流程变化也不是很大.有变化的是1.yii2带入的PHP5.4的特性,引入了namespace解决命名冲突,因此基类不会再C字开头了2.不再所有类都继承自组件Component,而是选择继承object和component(也继承自object,但带有事件功能.以及用于扩展的Behavior功能)3.更加的MVC,原先的view层其实基本算是con…
这一篇文章的开头就无需多言了,紧接着上一篇的内容和计划,这一篇我们来说说Yii2的Behavior和Validations. Behavior 首先我们来说说Behavior,在Yii2中Behavior主要是可以用于一些常用的Model字段当中,对其进行自动化操作,比如自动添加一些时间戳字段等,这样我们就不用在每一个需要保存记录的地方分别写生成时间戳的代码了,比如前面我们在Yii2系列教程五:简单的用户权限管理中的controllers/StatusController.php的actionC…
刚开始用 Yii 的小朋友可能对下面的写法非常疑惑: public function actionIndex() { $user = User::find()->where(['name'=>'zhangsan'])->one(); $user->orders; // 关联查询订单表 } 去 User 的 Model 去找 orders 属性也没找到,这个是什么实现的?为什么可以这样写? 其实这个只是 PHP 魔术方法的__get的一种实现. 为了更高的访问了我们的数据,Yii2…
Yii2.0基础框架   缘起 因为一个月的短暂停留,我在给朋友搞事情,所以Yii系列的文章耽搁了很长时间,现在又重拾当时的知识,给大伙好好撸下这一系列的博客 提起Yii,虽然是国外的开发者搞的,但是它的作者是华人,这才是让我们引以为豪的,如果以后有机会薛强回国大力发展PHP事业,我肯定回去他麾下搞事情,为PHP在国内的发展贡献自己的一份力,虽然现在没有这个能力,这不薛强没回来嘛,回来的话那时的我肯定可以的~哈哈哈~ 领英上强哥的背景如下: 职务:MicroStrategy 公司担任构架师 地址…
说点闲话 距离上次写博客,已经有一年了.在动手写之前,总是带着深深的罪恶感.被它折磨许久,终于,还是,动手了. 值得庆祝的一件事:最近开始健身了.每天动感单车45分钟,游泳45分钟,真的是(生)爽(不)到(如)爆(死). 好了,扯淡完毕,步入正题. ActiveRecord被莫名写入? 准备知识 ActiveRecord的基本用法.如果不理解,可参考这里. 代码现场 /** * @property integer $id * @property string $name * @property…
前言:最近在用php写一个项目的接口,所以需要学习一下Yii的框架,也在这里记录一下. 整体结构 ssets文件夹:assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件 ,但是我们又希望将module单独出来,所以需要使用发布,即将一个目录下的文件复制一份到assets下面方便通过url访问. commands文件夹:控制台脚本存放的地方,自动运行脚本 config文件夹:配置文件存放的文件夹 controller文件夹:MVC中C文件存…
上一篇文章网站实现微信登录之嵌入二维码中描述了如何在自己的登录页面内嵌入登录二维码,今天的这篇文章主要是描述下在扫码成功之后微信重定向回网站后登录逻辑的处理,其实也就是验证身份信息,授权用户登录的逻辑.这里说句题外话,写博客复习已经做过的项目真的有助于自己对已经写过代码和业务逻辑的理解,说不定还有意外的收获.所谓,“温故而知新”,我会保持写博客的习惯. 1,微信扫码成功之后 在用户扫码成功之后,pc端网站上的二维码会出现如下的提示:(这里是用的微信开发文档中的例子1号店网站用来演示效果). 这里…
之前写了一篇yii2获取登录前的页面url地址的文章,然后发现自己对于网站实现微信扫码登录功能的实现不是很熟悉,所以,我会写2-3篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登录网站的基本开发过程和需要注意的地方.这是第一篇,主要是描述如何在自己的登录页面内嵌入登录二维码.按照微信开放平台开发者文档网站应用微信登录开发指南中的一步一步来即可. 1,要扫码登录首先要有码 先看看文档中给提供的嵌入二维码的示例代码: 需要先引入微信提供的js文件 <script src="…
对于一个有登录限制(权限限制)的网站,用户输入身份验证信息以后,验证成功后跳转到登录前的页面是一项很人性化的功能.那么获取登录前的页面地址就很关键,今天在做一个yii2项目的登录调试时发现了一些很有意思的问题,记录下来. 1,场景描述 网站SiteA上的页面Page2需要登录后才能查看,Page2的链接放在页面Page1的一个按钮Button上,Page1在登录前后都是可以访问的,SiteA只提供了微信扫码登录的入口. 2,功能需求 假定访客User已经在SiteA上注册过,但当前未登录.Use…
周六闲来无事,就试着安装和部署下yii2,安装过程没什么问题,但部署到nginx上时遇到了502 bad gatewary问题,折腾了半天才搞定.这个问题是我以前在部署yii2时没有遇到过的,因此记在这里以备忘. 1,安装和部署环境 操作系统:macOS,php版本:5.6,nginx版本:1.10.1,yii2版本:2.0. 2,yii2的安装 yii2的安装很简单,参考官网的手册即可.我这里安装的是yii2-app-advanced(Yii 2 Advanced Project Templa…
这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖.回帖.浏览权限 中级会员组:回帖.浏览权限 初级会员组:浏览 在Yii2.0中 yii\rbac: Item  为角色或者权限的基类,其中用字段type来标识.1代表角色,2代表权限 yii\rbac: Role  为代表角色的类 yii\rbac: Permission  为代表权限的类 yii…