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,结果如下:
然后我们访问/goods/index和/order/index,行为方法成功调用,结果如下:
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
behavior php,YII2框架中behavior行为的理解与使用方法示例相关推荐
- 在YII2框架中使用UEditor编辑器发布文章
在YII2框架中使用UEditor编辑器发布文章 创建文章数据表 文章数据表主要有4个字段 id 主键(int) title 标题(varchar) content 内容(text) created ...
- yii引入php文件,Yii2框架中CSS、JS文件引入要领_PHP开发框架教程
在yii2中,因为yii2版本升级致使了,许多yii2的用法跟yii1有着很大的区分,这几天一直在view层的视图界面徜徉着,碰到什么问题呢? (引荐进修:yii框架) 问题就是搞不清我该怎样去引入C ...
- php 接收curl json数据格式,curl发送 JSON格式POST数据的接收,以及在yii2框架中的实现原理【精细剖析】...
1.通过curl发送json格式的数据,譬如代码: function http_post_json($url, $jsonStr) { $ch = curl_init(); curl_setopt($ ...
- YII2框架中 where limit offset 函数对分页的使用
YII2框架中 where limit offset 函数对分页的使用 以前公司用的是TP框架,直接往limit函数里面传两个动态的参数就可以实现分页的效果了,刚换了公司这个公司用的是YII2 框架, ...
- 手工集成7牛SDK到YII2框架中
手工集成7牛SDK到YII2框架中 7牛地址:qiniu.com 7牛云的产品列表中有:对象存储.自定义数据处理.多媒体处理.融合CDN加速.直播空间等资源. 我们上传图片文件需要的是『对象存储』,关 ...
- yii 加载php文件,Yii2框架加载css和js文件的方法分析
本文实例讲述了Yii2框架加载css和js文件的方法.分享给大家供大家参考,具体如下: 1.第一步是要把我们的css.js文件放到web目录下 2.第二步修改assets/AppAsset.php文件 ...
- php ci post 请求,CI框架中判断post,ajax,get请求的方法
这篇文章主要介绍了关于CI框架中判断post,ajax,get请求的方法 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 CI框架当中并没有提供,类似tp框架中IS_POST,IS_A ...
- Python的Django框架中forms表单类的使用方法详解2
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
- Spring框架中集合属性为对象的注入方法
Spring框架中集合属性为对象的注入方法 前言 创建基础类 创建`Course`类 编写XML配置文件 创建测试类 执行结果 前言 在集合的属性注入中,如果注入属性为普通类型(String.int) ...
最新文章
- linux sort 源码_Linux: 史上最全的sort命令案例,打包带走吧
- 使用MySQL Proxy解决MySQL主从同步延迟
- Maven3.x 插件开发入门
- mysql重装要删注册表_Mysql重装问题—删除注册表
- h5c3 part6 flex
- 如何将cocos2d-x项目打包成一个.exe
- 在计算机网络中通常所说的wlan是指,在计算机网络中,通常所说的WLAN是指()。 - 问答库...
- iPhone开发阶段性总结
- 程序和算法之间,主要有什么关系?
- FileZilla Client ftp上传软件
- 麒麟linux硬盘安装,U盘安装中标麒麟Linux桌面版的方法
- 红米pro位置服务器,数码产品:红米note8pro nfc感应区在哪 nfc位置
- 云服务器中的mac地址是什么?
- HDU 4125 Moles 二叉排序树 树状数组 kmp
- 尚融宝29-提现和还款
- 领导问“你这块表多少钱?”缺心眼说价钱,不懂这4个话术惹麻烦
- PS快速将白底图片变为透明图片的解决办法
- calc():css简单的数学运算–加减乘除
- 以业务管理信息化系统建设推动施工企业数字化转型
- 魏宇轩后台管理(1)_项目介绍
热门文章
- 如何通过像素点找到世界坐标_如何通过阅读来找到自己理论研究的“视域”?...
- 1.Redis简介与基本命令
- 蓝色三角_叶子长得像韭菜,花朵开得像个糖三角的鸢尾,用这3个方法拍摄它...
- 论文浅尝 | Multimodal Few-Shot Learning with Frozen Language Models
- 论文浅尝 | 基于知识库的自然语言理解 04#
- 领域应用 | 中医临床术语系统
- 基于机器学习的网络安全态势感知
- JAVA面试题:HashMap和Hashtable的区别
- centos 6.5 防火墙开放指定端口
- JavaWeb从开发环境搭建,到第一个servlet程序(图文)