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

本文实例讲述了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,结果如下:

40f519215d2aec78ed98d98eabdb620e.png

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

1733df8b0913267b076ad4a8f27474e4.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

乐观锁和悲观锁_什么是悲观锁和乐观锁?

思维导图文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary悲观锁悲观锁是平时开发中经常用到的一种锁,比如ReentrantLock和synchronized等就是这种思想的体现,它总是假设别的线程在拿线程的时候都会修…

为了研究因果关系,原来科学家在这么多方向上都有尝试

来源:混沌巡洋舰1. 为何关注因果关系在现代科学之前,不管东西方,都是从经验出发,通过归纳获得知识,然而这样的知识,受限于观测,无法产生突破性的成果,在这样的模式下,再探…

mysql 有一组经纬度 返回在某个区域内_Qt编写地图综合应用17-地址经纬度互转

## 一、前言地址和经纬度互相转换的功能也经常用到,比如上次的路线方案查询的功能,之前官网是提供了直接输入出发地点和目的地的中文汉字,就可以查询到最优的路线,后面只支持输入出发地点和目的地的经纬度坐标了,这个就…

杨强 : 迁移学习——人工智能的最后一公里

来源:智能系统学报11月30日上午,第九届吴文俊人工智能科学技术奖颁奖典礼暨2019中国人工智能产业年会在苏州广电大厦演播厅隆重举行。本届大会主题是“突破关键技术赋能产业落地”。大会邀请到国家部委专家、两院院士和产业领军人士,围绕77场…

直接点oracle表编辑器,DbForge Studio for Oracle入门教程:如何在表编辑器中创建表...

dbForge Studio for Oracle是一个功能强大的集成开发环境(IDE),它提供了通用的数据编辑工具来管理数据库内和外部数据,能够帮助Oracle开发者提高PL/SQL的编码速度。【dbForge Studio for Oracle 最新试用版下载】在本文示例中,我们将创建一个…

设置窗口置顶_这三个应用,每一个都能让你置顶。

| 当你有多个窗口同时打开,置顶其中某个或某些,能够方便你对比、学习、抄写……但不是所有软件都有这个功能,所以你需要今天的小干货。|-----------你的高效生活视频书。将窗口置顶,可以方便我们对比、写作、修改文案或代码&#…

汽车传感器科普

来源:湖杉资本先进驾驶辅助系统(Advanced Driver Assistant System),简称ADAS,是利用安装于车上的各式各样的传感器, 在第一时间收集车内外的环境数据, 进行静、动态物体的辨识、侦测与追踪等技…

人工智能的现状与未来

来源: CIO之家几十年来计算速度飞速提高,从最初的科学数学计算演变到了现代的各种计算机应用领域,诸如多媒体应用,计算机辅助设计,数据库,数据通信,自动控制等等,人工智能是计算机科…

php分页技术的作用,分页原理技术细节剖析(php+mysql)实例

提到分页,大家都不陌生,在我们日常浏览网页时常遇到,尤其新闻文章列表等都有分页,如下图所示:分页实例下面,通过一个实例为大家剖析一下分页原理上技术细节。一、功能开发思路在分页功能的实现前&#xff0…

2020年物联网发展现状与趋势预测

来源:北京物联网智能技术应用协会一、综述物联网源于互联网领域,是信息科学技术产业的第三次革命。物联网是基于互联网,让所有物体能够独立寻址的普通物理对象实现互联互通的网络。简单说,就是通过安装信息传感设备,如…

shell中执行某条语句失败能不能重复执行_如何理解Mysql中的事务隔离级别?

要说清楚Mysql中的事务隔离级别,我们先从事务的定义说起。事务,是一个或一组sql语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。整个单独单元作为一个不可分割的整体,如果单元中某条sql语句一旦执行…

oracle 试图访问已经在使用的事物处理临时表,解决ORA-14450:试图访问已经在使用的事务处理临时表...

在开发使用过程中,一个存储过程用到表TMP_DA_GMS,允许程序的时候报错,后台查询到错误原因是因为表里有个字段需要设置为可以为N在开发使用过程中,一个存储过程用到表TMP_DA_GMS,允许程序的时候报错,后台查询到错误原因是因为表里有…

《数字孪生体技术白皮书(2019)》(简版)全文

来源:《数字孪生体实验室原创》12月27日,数字孪生体实验室与安世亚太联合正式发布了《数字孪生体技术白皮书(2019)》。白皮书的第一部分关注对数字孪生体的抽象和总结。无论是参考架构、成熟度模型还是关键技术,都以“…

sql 删除字段中下划线_SQL基础教程知识点总结

1. ●列 ●字段 ●行 ●记录 2. SQL 语句及其种类 DDL DDL(Data Definition Language,数据定义语言)用来创建或者删除存储 数据用的数据库以及数据库中的表等对象。DDL 包含以下几种指令。 CREATE:创建数据库和表等对象 DROP: 删除数据库和表等对象 ALTER: 修改数据…

王恩东院士:AI计算是未来的核心生产力

来源:蓝海长青智库12月27日,以“超算无界、智创未来”为主题的2019国际超级计算产业博览会在济南召开。中国工程院院士、浪潮集团首席科学家王恩东在大会发表《智慧计算 未来动力》主题演讲。王恩东指出,人工智能正在驱动前所未有的社会变革&…

​采访了14位技术公司的创始人,他们如何看待2020年的AI行业?

来源:KDnuggets编译:木槿、张大笔茹、楚阳科幻元年2020年马上就要来了。对于技术行业来说,这一年会有哪些值得期待的变化?KDnuggets采访了14位科技前沿的技术公司创始人,并汇总了他们眼中的2020年:关于人工…

前端编程基础

网页前端编程基础 HTML 是用来描述网页的一种语言。HTML 指的是超文本标记语言 (Hyper Text Markup Language)HTML 不是一种编程语言&#xff0c;而是一种标记语言 (markup language)标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页<html> <body>…

spark sql合并小文件_Spark SQL小文件问题在OPPO的解决方案

Spark SQL小文件是指文件大小显著小于hdfs block块大小的的文件。过于繁多的小文件会给HDFS带来很严重的性能瓶颈&#xff0c;对任务的稳定和集群的维护会带来极大的挑战。一般来说&#xff0c;通过Hive调度的MR任务都可以简单设置如下几个小文件合并的参数来解决任务产生的小文…

白春礼:探究物质世界奥秘的一把金钥匙——纪念元素周期表发表150周年

来源&#xff1a;中国科学报联合国大会宣布2019年为国际化学元素周期表年&#xff0c;旨在纪念俄罗斯化学家门捷列夫在150年前发表元素周期表这一科学发展史上的重大成就。世界万物是由什么最基本的物质构成的&#xff1f;这些最基本的物质又是怎样变成万物世界的&#xff1f;这…

莫名的证书错误...ERROR ITMS-90035:Invalid Signature.

请删除 .DS_Store 这种类似的文件再尝试转载于:https://www.cnblogs.com/decode1234/p/6529601.html