Yii2 behavior运用
class ReturnDataTypeBehaviors extends Behavior
{ public $type = 'json';
public $pcOrMobile = 'pc'; // or mobile //控制器执行之后事件
public function events()
{
return [Controller::EVENT_BEFORE_ACTION => 'beforeType'];
} /**
* 返回数据类型判断
* @param $event
* @return bool
*/
public function beforeType($event)
{
if ($this->pcOrMobile == 'pc') {
if (Yii::$app->request->isAjax) {
if ($this->type == 'json') {
Yii::$app->response->format = Response::FORMAT_JSON;
} elseif ($this->type == 'xml') {
Yii::$app->response->format = Response::FORMAT_XML;
}
}
} else {
if ($this->type == 'json') {
Yii::$app->response->format = Response::FORMAT_JSON;
} elseif ($this->type == 'xml') {
Yii::$app->response->format = Response::FORMAT_XML;
}
}
return true;
} }
写在BaseController 里面 ,其他的控制器继承Base ,设定请求返回的数据
<?php namespace app\controllers; use app\behaviors\ReturnDataTypeBehaviors;
use app\helpers\Util;
use yii\helpers\Url;
use yii\web\Controller;
use app\models\Configuration;
use Yii; class BaseController extends Controller
{
/**
* 默认分页值 默认10
*/
const PAGE_SIZE = 6; public function behaviors()
{
return [ 'myBehavior' => [ 'class' => ReturnDataTypeBehaviors::className(),
# 'type'=>'json',
#'pcOrMobile'=>'pc'
]
];
}
public function init()
{
//设置回调url
$this->_redirectUrl();
// 登录验证
$this->_checkLogin();
//session存留时间
$this->_setSessionTime();
} // 登录回调
private function _redirectUrl()
{
$redirectUrl = Yii::$app->request->url; if ($redirectUrl == '/site/login') { $redirectUrl = '/desktop';
}
//设置登录后的回调路径
Yii::$app->session->setFlash('redirectUrl', $redirectUrl);
} // 权限验证
private function _rbac()
{ //超级管理员不用过滤 } // 登录验证
private function _checkLogin()
{
if (!(Yii::$app->request->url == '/site/login') && !Yii::$app->user->getId()) {
header('Location:'.Yii::$app->request->getHostInfo().'/site/login');
exit;
} }
//弹出小框提示
public function TipsBox($msg='',$url='')
{ }
//设置session的存储时间
private function _setSessionTime()
{
Yii::$app->session->setTimeout(1440 * 2 );
} }
Controller::EVENT_BEFORE_ACTION => 'beforeType' 触发事件调用‘beforeType’方法
Yii2 behavior运用的更多相关文章
- Yii2的深入学习--行为Behavior
我们先来看下行为在 Yii2 中的使用,如下内容摘自 Yii2中文文档 行为是 [[yii\base\Behavior]] 或其子类的实例.行为,也称为 mixins,可以无须改变类继承关系即可增强一 ...
- Yii2.0源码阅读-behavior的实现原理
Yii2.0中的一个思想就是组件化的思想,所以.大多数的类都直接或间接的继承自yii\base\Component,而组件的三大功能:属性.事件.行为. 行为的目的是为了方便的扩展一个类的功能,而不需 ...
- Yii2基本概念之——行为(Behavior)
使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充.通过将行为绑定到一个类,可以使得类具有行为本身所具有的属性和方法,就好像是类本来就具有的这些属性和功能一样. 好的代码设计, ...
- YII2中behavior行为的理解与使用
YII2中的行为说白了就是对组件功能的扩展,在不改变继承关系的条件下. 行为附加到组件后,行为将注入自已的方法和属性到组件,可以像组件访问自定义的方法和属性一样访问行为. 注意行为是对功能的扩展,不要 ...
- YII2中controller中的behaviors中的behavior内部是如何被使用的?
1. behaviors方法的调用: 在祖先对象components中有一个ensureBehaviors方法,代码如下: /** * Makes sure that the behaviors de ...
- yii2 源码分析Behavior类分析 (四)
Behavior类是所有事件类的基类,它继承自object类 Behavior类的前面注释描述大概意思: * Behavior类是所有事件类的基类 * * 一个行为可以用来增强现有组件的功能,而不需要 ...
- 忘记时间戳的存在——Yii2超实用的自动更新时间戳的Behavior(改进版)
本文改进了Yii2中内置行为类TimestampBehavior,使得时间戳字段(如created_at,updated_at) 完全自己更新,方便得让你忘记它们的存在. Yii2的内置行为类Time ...
- Yii2 中禁用csrf校验
Yii2 默认开启csrf校验,但是有些时候确实不需要校验,比如对外提供API 一般做法直接在xxController中增加属性: public $enableCsrfValidation = fal ...
- Yii2的深入学习--继承关系
想要了解 Yii2 的话,一定要对 Yii2 中相关类的继承关系有所了解.由于暂时读的代码有限,下面的图中只列出了部分继承关系,之后回跟着源码阅读的越来越多而增加 由上图可以看到 Yii2 中大多数类 ...
随机推荐
- thinkphp分页格式的完全自定义,直接输入数字go到输入数字页
实现分页效果如下: 以下标注红色字体的为重点 找到文件page.class.php在ThinkPHP/Library/Thinkpage.class.php并打开文件,复制函数show,在本文件中 ...
- C#正则表达式Regex类使用
作为文本处理的利器——Perl语言对正则表达式的最强大支持起到了重要的作用,正因为如此,许多其他语言在加入正则表达式引擎的时候都会或多或少的兼顾perl风格的正则表达式,开发出相应的引擎.本人使用pe ...
- (转载)delphi中获取汉字的拼音首字母
delphi中获取汉字的拼音首字母1.py: array[216..247] of string = ({216}'CJWGNSPGCGNESYPB' + 'TYYZDXYKYGTDJNMJ' + ' ...
- centos 6.3 64位安装php5.5及配置tengine
PHP 用到的工具包: yum install gd-devel libjpeg-devel libpng-devel freetype-devel libxml2-devel curl-devel ...
- SQL 多条件查询
网上有不少人提出过类似的问题:“看到有人写了WHERE 1=1这样的SQL,到底是什么意思?”.其实使用这种用法的开发人员一般都是在使用动态组装的SQL.让我们想像如下的场景:用户要求提供一个灵活的查 ...
- 50个实用的jQuery代码段让你成为更好的Web前端工程师
本文会给你们展示50个jquery代码片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够帮助 ...
- python类的继承
继承一个类 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init__(self ...
- bzoj 2244: [SDOI2011]拦截导弹 cdq分治
2244: [SDOI2011]拦截导弹 Time Limit: 30 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 237 Solved: ...
- 中间人攻击之arp欺骗 科普ARP欺骗
中间人攻击之arp欺骗 科普ARP欺骗 A <-> B A中有个ARP Table,每次发包都会在此Table中查找,若找不到,发APR Request包询问.此时若hacker冒充B的M ...
- POJ 1778 All Discs Considered(拓扑排序)
点我看题目 题意 :其实题意我也说不清楚,因为比赛的时候我盯着看了1个小时也没看懂....就是两个磁盘,第一个有n1的安装包,编号为1~n1,第二个有n2个安装包,编号为n1~n2.给你d对关系,(x ...