本文实例讲述了YII2框架中behavior行为的理解与使用方法。分享给大家供大家参考,具体如下:

YII2中的行为说白了就是对组件功能的扩展,在不改变继承关系的条件下。

行为附加到组件后,行为将注入自已的方法和属性到组件,可以像组件访问自定义的方法和属性一样访问行为。

注意行为是对功能的扩展,不要乱用行为,比如有一个动物类和一个人类,他们各自有自已的名称,身高,体重,这些是属性。

他们都会跑,这个时候我们就可以抽象出来做成一个跑的行为,根据不同需求来扩展他们。

这里我们有两个控制器一个GoodsController,一个OrderController,他们都接收请求,返回数据给客户端,不过有的需要返回json,有的需要返回xml。

那么我们就创建一个返回数据行为来扩展这两个控制器。

我们在项目目录下创建common目录,并创建ReturnBehavior.php,代码如下:

namespace app\common;

use YII;

use yii\base\Behavior;

use yii\web\Controller;

use yii\web\Response;

//必须继承自yii\base\Behavior

class ReturnBehavior extends Behavior

{

//返回类型,通过控制器里的behaviors()配置参数获取值

public $return_type = '';

//让行为响应组件的事件触发

public function events()

{

return [

//控制器方法执行后触发事件,调用returnData函数

Controller::EVENT_AFTER_ACTION => 'returnData',

];

}

//返回数据

public function returnData()

{

switch ($this->return_type) {

case 'json':

YII::$app->response->format = Response::FORMAT_JSON;

break;

case 'xml':

YII::$app->response->format = Response::FORMAT_XML;

break;

case 'html':

YII::$app->response->format = Response::FORMAT_HTML;

break;

default :

break;

}

}

//定义方法

public function test() {

echo 'returnBehavior test ...';

}

}

然后我们在两个控制器中配置behaviors()来使用行为:

GoodsController.php代码如下:

namespace app\controllers;

use YII;

use app\common\ReturnBehavior;

use yii\web\Controller;

//想要使用行为,必须是component或是其子类

//yii\web\Controller继承自component,所以可以使用

class GoodsController extends Controller

{

//配置控制器需要使用的行为

public function behaviors()

{

return [

'returnBehavior' => [

'class' => ReturnBehavior::className(),

'return_type' => 'json',

],

];

}

//获取商品列表

public function actionGetGoodsList()

{

return [

['id' => 1, 'name' => '商品1'],

['id' => 2, 'name' => '商品2'],

];

}

public function actionIndex()

{

//控制器调用行为中的方法

$this->getBehavior('returnBehavior')->test();

//注意这里,因为使用了行为,方法执行后会设置返回内容为xml,我们重新设置为html

$this->getBehavior('returnBehavior')->return_type = 'html';

}

}

OrderController.php代码如下:

namespace app\controllers;

use YII;

use app\common\ReturnBehavior;

use yii\web\Controller;

//想要使用行为,必须是component或是其子类

//yii\web\Controller继承自component,所以可以使用

class OrderController extends Controller

{

//配置控制器需要使用的行为

public function behaviors()

{

return [

'returnBehavior' => [

'class' => ReturnBehavior::className(),

'return_type' => 'xml',

],

];

}

//获取商品列表

public function actionGetOrderList()

{

return [

['id' => 1, 'name' => '订单1'],

['id' => 2, 'name' => '订单2'],

];

}

public function actionIndex()

{

//控制器调用行为中的方法

$this->getBehavior('returnBehavior')->test();

//注意这里,因为使用了行为,方法执行后会设置返回内容为xml,我们重新设置为html

$this->getBehavior('returnBehavior')->return_type = 'html';

}

}

这个时候我们在地址栏访问/goods/get-goods-list和/order/get-order-list,结果如下:

然后我们访问/goods/index和/order/index,行为方法成功调用,结果如下:

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

behavior php,YII2框架中behavior行为的理解与使用方法示例相关推荐

  1. 在YII2框架中使用UEditor编辑器发布文章

    在YII2框架中使用UEditor编辑器发布文章 创建文章数据表 文章数据表主要有4个字段 id  主键(int) title 标题(varchar) content 内容(text) created ...

  2. yii引入php文件,Yii2框架中CSS、JS文件引入要领_PHP开发框架教程

    在yii2中,因为yii2版本升级致使了,许多yii2的用法跟yii1有着很大的区分,这几天一直在view层的视图界面徜徉着,碰到什么问题呢? (引荐进修:yii框架) 问题就是搞不清我该怎样去引入C ...

  3. php 接收curl json数据格式,curl发送 JSON格式POST数据的接收,以及在yii2框架中的实现原理【精细剖析】...

    1.通过curl发送json格式的数据,譬如代码: function http_post_json($url, $jsonStr) { $ch = curl_init(); curl_setopt($ ...

  4. YII2框架中 where limit offset 函数对分页的使用

    YII2框架中 where limit offset 函数对分页的使用 以前公司用的是TP框架,直接往limit函数里面传两个动态的参数就可以实现分页的效果了,刚换了公司这个公司用的是YII2 框架, ...

  5. 手工集成7牛SDK到YII2框架中

    手工集成7牛SDK到YII2框架中 7牛地址:qiniu.com 7牛云的产品列表中有:对象存储.自定义数据处理.多媒体处理.融合CDN加速.直播空间等资源. 我们上传图片文件需要的是『对象存储』,关 ...

  6. yii 加载php文件,Yii2框架加载css和js文件的方法分析

    本文实例讲述了Yii2框架加载css和js文件的方法.分享给大家供大家参考,具体如下: 1.第一步是要把我们的css.js文件放到web目录下 2.第二步修改assets/AppAsset.php文件 ...

  7. php ci post 请求,CI框架中判断post,ajax,get请求的方法

    这篇文章主要介绍了关于CI框架中判断post,ajax,get请求的方法 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 CI框架当中并没有提供,类似tp框架中IS_POST,IS_A ...

  8. Python的Django框架中forms表单类的使用方法详解2

    用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...

  9. Spring框架中集合属性为对象的注入方法

    Spring框架中集合属性为对象的注入方法 前言 创建基础类 创建`Course`类 编写XML配置文件 创建测试类 执行结果 前言 在集合的属性注入中,如果注入属性为普通类型(String.int) ...

最新文章

  1. linux sort 源码_Linux: 史上最全的sort命令案例,打包带走吧
  2. 使用MySQL Proxy解决MySQL主从同步延迟
  3. Maven3.x 插件开发入门
  4. mysql重装要删注册表_Mysql重装问题—删除注册表
  5. h5c3 part6 flex
  6. 如何将cocos2d-x项目打包成一个.exe
  7. 在计算机网络中通常所说的wlan是指,在计算机网络中,通常所说的WLAN是指()。 - 问答库...
  8. iPhone开发阶段性总结
  9. 程序和算法之间,主要有什么关系?
  10. FileZilla Client ftp上传软件
  11. 麒麟linux硬盘安装,U盘安装中标麒麟Linux桌面版的方法
  12. 红米pro位置服务器,数码产品:红米note8pro nfc感应区在哪 nfc位置
  13. 云服务器中的mac地址是什么?
  14. HDU 4125 Moles 二叉排序树 树状数组 kmp
  15. 尚融宝29-提现和还款
  16. 领导问“你这块表多少钱?”缺心眼说价钱,不懂这4个话术惹麻烦
  17. PS快速将白底图片变为透明图片的解决办法
  18. calc():css简单的数学运算–加减乘除
  19. 以业务管理信息化系统建设推动施工企业数字化转型
  20. 魏宇轩后台管理(1)_项目介绍

热门文章

  1. 如何通过像素点找到世界坐标_如何通过阅读来找到自己理论研究的“视域”?...
  2. 1.Redis简介与基本命令
  3. 蓝色三角_叶子长得像韭菜,花朵开得像个糖三角的鸢尾,用这3个方法拍摄它...
  4. 论文浅尝 | Multimodal Few-Shot Learning with Frozen Language Models
  5. 论文浅尝 | 基于知识库的自然语言理解 04#
  6. 领域应用 | 中医临床术语系统
  7. 基于机器学习的网络安全态势感知
  8. JAVA面试题:HashMap和Hashtable的区别
  9. centos 6.5 防火墙开放指定端口
  10. JavaWeb从开发环境搭建,到第一个servlet程序(图文)