学习yii2.0——行为
学习yii框架的行为之前,需要先了解yii的事件,可以参考这篇博客:
怎么理解行为
yii框架的行为有点类似于trait,可以有个大体的概念:
1、有一个类A,包含一些属性和方法,很普通的一个类A。
2、现在需要在这个简单的类中使用类B和类C中的某些属性和方法,或者这两个类中为指定事件绑定的事件处理程序。
有一种方法可以实现:可以使用组合的方式,在这个简单的类A中,创建其他类(B、C)的对象,然后进行其他的操作,比如访问他们的成员属性和方法。
yii框架中行为的功能:
1、在类B和类C声明为行为类,可以在这个行为类中定义属性和方法,以及某些事件对应的事件处理程序。
2、在类A中的behavior方法中,将前面的两个行为类B、C包含进来,那么就可已使用B、C中的行为和方法了。
注意这里并没有把B、C实例化,而是直接使用B、C类中的方法和属性。
<?php
namespace app\controllers; use yii\web\Controller;
use yii\base\Behavior; class Demo {
public function Show()
{
echo "this is demo<br>";
}
} //自定义的行为类要继承yii\base\Behavior类
class MyHavior1 extends Behavior
{
public $prop = "hello world 1 <br>"; //自定义的方法
public function test()
{
echo "this is MyHavior 1 /tetst<br>";
} public function events()
{
//指定事件
return [
"cry" => function() {echo "don't cry 1<br>";},
"test" => [new \app\controllers\Demo(), "Show"]
];
}
} //自定义的行为类要继承yii\base\Behavior类
class MyHavior2 extends Behavior
{
public $prop = "hello world 2 <br>"; //自定义的方法
public function test()
{
echo "this is MyHavior 2 /tetst<br>";
} public function events()
{
//指定事件
return [
"cry" => function() {echo "don't cry 2<br>";},
"test" => [new \app\controllers\Demo(), "Show"]
];
}
} class HelloController extends Controller
{
public function behaviors()
{
return [
//返回附加行为,默认是都添加
//加载两个行为类,demo和example类似于标签,这里的顺序是有意义的
"demo" => MyHavior1::className(),
"example" => MyHavior2::className()
];
} public function actionIndex()
{
//当两个行为behavior有相同的行为的时候,默认以behaviors中先出现优先级高
echo $this->prop; // hello world 1
$this->test(); //this is MyHavior/tetst 1
$this->trigger("cry"); //don't cry 1 don't cry 2 //手动从前面behaviors()中选择附加行为
$behaviors = $this->getBehavior("example");
echo $behaviors->prop; // hello world 2
$behaviors->test(); // this is MyHavior 2 /tetst
$this->trigger("test"); // this is demo this is demo echo "aaa";
//手动删除附加的行为,现在只有example有意义了
$this->detachBehavior("demo");
echo $this->prop; // hello world 2
$this->test(); //this is MyHavior/tetst 2
$this->trigger("cry"); //don't cry 1 don't cry 2 //从上面的例子中可以看出,事件一旦触发,那么虽然有先后顺序,但是都会执行事件处理程序
//但是访问属性和方法时,如果有重复时,默认是第一个为准
}
}
学习yii2.0——行为的更多相关文章
- 学习yii2.0——基础入门
声明:本文内容来自于yiichina.com的权威指南. 安装 推荐使用composer来安全,可能有点慢(要下载的依赖比较多). composer create-project --prefer-d ...
- 学习yii2.0——事件
参考:https://www.yiichina.com/doc/guide/2.0/concept-events 事件 yii框架中的事件定义和JavaScript中的事件定义差不多:为某个事件绑定一 ...
- 学习 yii2.0——视图之间相互包含
布局 首先创建一个布局文件simple.php,路径是在views/layout/目录下. <p>this is header</p> <?= $content ?> ...
- YII2.0--------这篇文章记录我学习YII2.0的过程吧,也可以让更多的人少走弯路
1.情况:今天我从github上下载了一个项目,本以为直接丢到根目录运行就行了,但是不行. 解决办法:首先安装git,安装步骤这里不讲了,稍微讲一下配置环境变量.
- 学习yii2.0——依赖注入
依赖注入 依赖注入是一种设计模式,可以搜索“php依赖注入”,这里不阐述了. yii框架的依赖注入 Yii 通过 yii\di\Container 类提供 DI 容器特性. 它支持如下几种类型的依赖注 ...
- yii2.0发送qq邮件详情配置
首先要想使用qq发送邮件必须打开使用的qq邮箱里的一个配置,
- Yii2.0 高级版安装 windows
最近在学习yii2.0 在安装高级版的时候遇到一些问题 索性解决了 下面分享一下 一.关于下载 自行百度,在Yii Framework 中文社区 下载专区下载高级应用程序模板(这边下载用电信网络不用下 ...
- Elasticsearch5.3 学习(一):安装、Yii2.0 下载es扩展
Elasticsearch是一个基于Lucene,提供了一个分布式多用户能力的全文搜索引擎.其他就不多说了,官方文档有详细的介绍. 我自己是在CentOS 7.0安装的 Elasticsearch 是 ...
- yii2.0的学习之旅(二)
前言:上一次我们简单认识了一下yii2.0安装,模型基本(增,删,改,查)操作 一.前后台数据交互 *如果你觉得默认的top样式太丑,可以这样关掉* *底部也可以这样关掉* (1)mvc合作操作数据 ...
随机推荐
- 利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果
利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果/etc/init.d/nginxd {start/stop/restart/reload}利用if语句实现: ============= ...
- PHP is much better than you think
Rants about PHP are everywhere, and they even come from smart guys.When Jeff Atwood wrote yet anothe ...
- 在模态框(Modal)中使用UEditor全屏显示的一个坑
根据这个问题很简单就能查到一些文章明确说明了解决问题的方法,就是如下一段代码: var isModal = false; //判断该dom是否为modal var classes = $(contai ...
- 【转】cookie如何共享到各个浏览器
可以考虑HTML5 localstorage, 点击查看原始尺寸 http://www.cnblogs.com/xiaowei0705/archive/2011/04/19/2021372.html也 ...
- 在Intellij IDEA下通过Hibernate逆向生成实体类
前言:在IDEA中,通过相关插件,可以利用Hibernate逆向生成数据表对应的实体类.具体操作及注意事项见本篇随笔. 1.创建一个基于maven的hibernate工程.并在工程中添夹hiberna ...
- swift Class的内存布局
class Human { //8 type or isa //retainCount var age: Int?//16 var name: String?//16 var nicknames: [ ...
- UVA1533-Moving Pegs(BFS+状态压缩)
Problem UVA1533-Moving Pegs Accept:106 Submit:375 Time Limit: 3000 mSec Problem Description Input ...
- fastText文本分类算法
1.概述 FastText 文本分类算法是有Facebook AI Research 提出的一种简单的模型.实验表明一般情况下,FastText 算法能获得和深度模型相同的精度,但是计算时间却要远远小 ...
- P1843 奶牛晒衣服(二分)
思路:就是一个模板,只是找最小化而已.在判断函数里面:当湿度<=x*A不判断, 反之sum+=(a[i]-x*A)/B+(a[i]-x*A)%B?1:0; #include<iostrea ...
- 010_动态语言与鸭子类型及python2和3的区别
一. 动态语言中经常提到鸭子类型,所谓鸭子类型就是:如果走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子(If it walks like a duck and quacks like a duck, ...