原文地址:http://www.it610.com/article/4918541.htm

行为就是继承yii\base\behavior,可以绑定到任意yii\base\compent实例上,然后这个compent实例就拥有了行为类所具有的属性和方法;

注意:Behavior只能与Component类绑定

参考出处:http://www.digpage.com/behavior.html

下面是两个例子:

1、分别定义行为类MyBehavior.php和组件类MyBehaviorAttachClass.php

(1)MyBehavior.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
namespace app\models;
use yii\base\Behavior;
?>
<?
class MyBehavior extends Behavior
{
    public $propertyTest='this is MyBehavior propertyTest';
    public function methodTest()
    {
        echo 'this is MyBehavior methodTest';
    }
 
}
?>

(2)MyBehaviorAttachClass.php

1
2
3
4
5
6
7
8
9
10
<?php
namespace app\models;
use yii\base\component;
?>
<?
class MyBehaviorAttachClass extends component
{
 
}
?>

(3)控制器中写个方法,以便演示时调用

1
2
3
4
5
6
7
8
public function actionBehavior()
    {
        $MyBehavior=new MyBehavior;
        $MyBehaviorAttachClass=new MyBehaviorAttachClass;
        $MyBehaviorAttachClass->attachBehavior('MyBehavior',$MyBehavior);
        echo $MyBehaviorAttachClass->propertyTest;
        echo $MyBehaviorAttachClass->methodTest();
    }

此时运行r=hello/Behavior就会显示如下界面:

2、在ActiveRecord中调用行为,这种属于静态调用,直接在类中写个behaviors方法就可以了

详情看:http://www.yiichina.com/question/807

下面是gii_test.php,位于models下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class gii_test extends \yii\db\ActiveRecord
{
    
public function behaviors()
{
return [
            [
                'class' => TimestampBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'],//其中created_at和updated_at是gii_test数据表的字段名,必须设置为int才能显示时间戳
                    ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],//否则显示00000000
                ],
            ],
        ];
   }
}

如果需要保留字段属性为 timestamp ,可以使用如下方法自动填充:

1
2
3
4
5
6
7
8
9
10
11
12
use yii\db\Expression;
public function behaviors()
{
     return [
         [
             'class' => TimestampBehavior::className(),
             'createdAtAttribute' => 'created_at',
             'updatedAtAttribute' => 'updated_at',
             'value' => new Expression('NOW()'),
         ],
     ];
}

行为Behavior的使用的更多相关文章

  1. Yii2的深入学习--行为Behavior

    我们先来看下行为在 Yii2 中的使用,如下内容摘自 Yii2中文文档 行为是 [[yii\base\Behavior]] 或其子类的实例.行为,也称为 mixins,可以无须改变类继承关系即可增强一 ...

  2. 《Note --- Unreal 4 --- behavior tree》

    Web: https://docs.unrealengine.com/latest/INT/Engine/AI/BehaviorTrees/index.html Test project: D:\En ...

  3. 使用行为树(Behavior Tree)实现游戏AI

    ——————————————————————— 谈到游戏AI,很明显智能体拥有的知识条目越多,便显得更智能,但维护庞大数量的知识条目是个噩梦:使用有限状态机(FSM),分层有限状态机(HFSM),决策 ...

  4. Dynamics AX 2012 R2 AIF No Endpoint Behavior Named 'clientEndpointBehavior'

          最近,Reinhard在使用Http Adapter类型的AIF入站端口时,总是报以下错误: Server Error in '/MicrosoftDynamicsAXAif60' App ...

  5. Silverlight behavior(行为) trigger 大全

    behavior是超级有用的东西,一定要学会,因为这个就是面向对象编程中的封装.超级重要! 欢迎大家如果有好的效果,可以给我留言,我打算不断的整理这个behavior,希望不久用behavior可以做 ...

  6. 深入理解MVVM模式中Silverlight的Trigger、Action和Behavior及Silverlight的继承机制

    接触Silverlight已经有两三个月了,开始一直感觉他和Winform很相似,拖拖控件就行了,所以一直把经历放在了研究后台和服务器交互和性能优化上面,很少去仔细研究Silverlight的页面.前 ...

  7. silverlighter下MVVM模式中利用Behavior和TargetedTriggerAction实现文本框的一些特效

    在silverlight一般开发模式中,给文本框添加一些事件是轻而易举的,然而MVVM开发模式中,想要给文本框添加一些事件并非那么容易,因为MVVM模式中,只有ICommand接口,而且也只有Butt ...

  8. 十五天精通WCF——第九天 高级玩法之自定义Behavior

    终于我又看完了二期爱情保卫战,太酸爽了,推荐链接:http://www.iqiyi.com/a_19rrgublqh.html?vfm=2008_aldbd,不多说,谁看谁入迷,下面言归正传, 看看这 ...

  9. 自定义CoordinatorLayout Behavior 隐藏Footer View

    在用新的控件中,我们可以用Toolbar与CoordinatorLayout实现 向上滚动隐藏的效果,可是官方并没有找到向上隐藏底部导航的功能,有一些第三方的框架实现了. 在Android M,Coo ...

  10. Behavior Tree

    http://www.craft.ai/blog/bt-101-behavior-trees-grammar-basics/ https://github.com/libgdx/gdx-ai/wiki ...

随机推荐

  1. U3D临时文件GICache巨大

    C:\Users\asus\AppData\LocalLow\Unity\Caches\GiCache 看名字似乎是全局光的缓存,可以通过Edit - Preference - GI Cache,选中 ...

  2. box-css3

    父容器样式必须有定义:"{ display: -webkit-box }" 现象:水平时只能在一行布局,子容器在垂直方向上会填充父容器. 技巧:可以做水平居中和垂直居中.也可以实现 ...

  3. Java系列:JVM指令详解(上)(zz)

    一.未归类系列A 此系列暂未归类. 指令码    助记符                            说明    59:iastore    60:lload 6       //因为str ...

  4. 解决方法:未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

    win7或win8 64位调试程序,出现这样的错误提示:未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序 解决方法如下: 方法一:“设置应用程序池默认属性”/“常规”/” ...

  5. 小白安装linux(虚拟机)red hat enterprise linux 6

    额,这篇貌似是我名义上的第一篇博客,但是我好像没有第一写他,没事,都一样.(我会假装它是人生中第一篇博客的) 上大学之后,很久之后才发现自己听喜欢linux的,因为感觉很高大上,所以自己自学了很多关于 ...

  6. 从Lumia退役看为什么WP走向没落

    前段时间决定将自己用了三年多的Lumia 800正式退役,这是我用的时间最长的手机,虽然系统上有缺陷,但是好不妨碍他成为我最有感情的一部手机.由于之前是WinPhone 开发者的关系,这部手机是微软送 ...

  7. Bootstrap3.0学习第九轮(CSS补充)

    详情请查看http://aehyok.com/Blog/Detail/15.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  8. AJAX练习(一):制作可以自动校验的表单(从原理上分析ajax的作用)

    继上文(AJAX(一)AJAX的简介和基础)作为联系. 传统网页在注册时检测用户名是否被占用,传统的校验显然缓慢笨拙. 当ajax出现后,这种体验有了很大的改观,因为在用户填写表单时,签名的表单项已经 ...

  9. iOS -- 给model赋值时走了[self setValuesForKeysWithDictionary:dic]不走setvalue: forked:

    这是一个小坑, 看看你的BaseModel的便利构造器的方法: + (__kindof BaseModel *)modelWithDic:(NSDictionary *)dic { return [[ ...

  10. 【The final】软件工程实践总结

    软件工程就这么告一段落了,竟然有那么一丢丢的舍不得-- 一.为拖延找的种种借口     [首先声明]以下纯粹是个人吐槽,仅作记录以便日后自己可以回顾一下往昔罢了,可以直接忽略,跳到第二大点:我的拖延之 ...