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,一经查实,立即删除!

相关文章

数字前端工程师必备技能

必备知识: 1.ASIC基础 (1)digital intergrated circut design (数字集成电路设计) (2)digital design principles and practices (数字设计——原理与实践) (…

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

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

oracle session_wait,转载:学习Oracle动态性能表-(8)-V$SESSION_WAIT,V$SESSION_EVENT

(1)-V$SESSION_WAIT这是一个寻找性能瓶颈的关键视图。它提供了任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做,则显示它最后的等待事件)。当系统存在性能问题时,本视图可以做为一个起点指明探寻问题的方向。V$SESSION_WAIT中…

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

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

[leetcode sort]56. Merge Intervals

Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,10],[15,18],return [1,6],[8,10],[15,18]. 合并重叠区间 1 class Solution(object):2 def merge(self, intervals):3 """4 :type i…

oracle solaris 内核 源码,直接安装内核区域

直接安装内核区域直接安装是缺省的内核区域安装方法。在直接安装中,安装程序将在全局区域中运行。缺省情况下,安装程序将创建和格式化内核区域引导磁盘,并使用全局区域的 pkg 发布者在该磁盘上安装 Oracle Solaris 软件包。注 -在内核区域直接…

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

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

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

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

《Spring》(十六)---- JDBC

一般情况下&#xff0c;都是在DAO类中使用JdbcTemplate&#xff0c;JdbcTemplate在XML配置文件中配置好&#xff0c;直接在DAO中注入即可。 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/be…

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

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

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

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

汽车传感器科普

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

人工智能的现状与未来

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

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

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

python idle 中文_Python IDLE 中文乱码问题

最近忙完了一个比较大的 GIS 软件系统&#xff0c;于是闲暇之余想研究一下开源的技术&#xff0c;纵观当前开源桌面 GIS 软件领域&#xff0c;最牛叉的莫过于大名鼎鼎的 Quantum GIS&#xff0c;简称 QGIS。做过 GIS 的人都知道&#xff0c;ESRI ArcGIS 是 GIS 软件领域迄今为止…

常见浏览器兼容性问题及解决方案

常见浏览器兼容性问题及解决方案&#xff1a; 1.不同浏览器的默认内外边距和内外补丁不同。 解决方案&#xff1a;css设置 *{margin:0; padding:0;} *是通配符&#xff0c;匹配所有html标签。 2.块级元素float之后&#xff0c;又有横向margin时&#xff0c;IE6显示margin比设置…

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

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

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

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

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

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

linux 下环境变量设置

Ubuntu Linux系统包含两类环境变量&#xff1a;系统环境变量和用户环境变量。系统环境变量对所有系统用户都有效&#xff0c;用户环境变量仅仅对当前的用户有效。 修改用户环境变量 用户环境变量通常被存储在下面的文件中&#xff1a; ~/.profile ~/.bash_profile 或者 ~./bas…