原文地址: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. C#泛型-模板特化

    class TClass<T, K> { } class SubTClass<T, C, K> : TClass<Char, K> { } class SubTCl ...

  2. MS-SQL SERVER单列合并的四种常用方法

    /* 原始数据 ID Name ----------- -------------------- 1 吕布 2 张飞 3 赵云 结果 ----------------- 吕布,张飞,赵云 */ )) ...

  3. EBS 用户及其联系人的失效时间

    联系人失效时间还有一个SQL,从页面的联系人详情简化取得的,不如直接用pos_supplier_users_v视图 SELECT * FROM (SELECT NULL contact_req_id, ...

  4. WinForm编程数据视图之DataGridView浅析

    学习C#语言的朋友们肯定或多或少地接触到了WinForm编程,在C#语言的可视化IDE中(如VS.NET中)使用设计器可以让我们轻松地完成窗体.按钮.标签.图片框等等控件的组合,我们可以轻易地做出界面 ...

  5. C#报错:创建调试信息文件 ……obj\Debug\model.pdb: 拒绝访问

    错误:创建调试信息文件“.......\obj\Debug\model.pdb”时发生错误 --“......\obj\Debug\model.pdb: 拒绝访问. 解决办法如下: 删除该项目下的 b ...

  6. Viewpager模仿微信主布局的三种方式 ViewPager,Fragment,ViewPager+FragmentPagerAdapter

    效果大概就是这样 很简单 : 1 创建 top 和bottom 2主界面布局 添加top 和bottom 中间添加一个ViewPage 3 给ViewPager 和 底部View设置点击事件 源码下载 ...

  7. Android一个大众化的设置界面

    布局代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:an ...

  8. linux内核分析 第八周

    第八周 理解进程调度时机跟踪分析进程调度与进程切换的过程 一.进程调度与切换 1.进程的调度时机与进程切换 操作系统原理中介绍了大量进程调度算法,这些算法从实现的角度看仅仅是从运行队列中选择一个新进程 ...

  9. ios UILocalNotification的使用

    iOS下的Notification的使用 Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iO ...

  10. 『.Net』微软家的女儿们

    在博客园看到了 一篇文章 <.NET4.0框架退休日期逐渐临近> 写下了这篇文章 —— 记录我和 .Net Framework 的 那些日子. 微软 家有几个 女儿. 2008年,我遇到他 ...