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 中大多数类 ...
随机推荐
- linux curl命令验证服务器断点续传支持
有个同事说,发现现在对外下载安装包的服务器不支持断点续传,我听了一阵纳闷,lighttpd server对于静态文件应该默认支持断点续传的,登机器查看lighttpd配置文件发现 对断点续传的支持被禁 ...
- hadoop1中mapreduce原理详解
剖析Mapreduce作业运行机制:原理如下图: 原理图的解释的可以分为以下几个部分 1.客户端提交一个mapreduce的jar包给JobClient 2.JocClient通过RPC和JobTra ...
- 版本控制工具git入门
版本控制工具的历史 不说了,放张图 两者的区别:集中式需要一个中心服务器放置最新的文件,需要联网操作.分布式可以再不联网的情况下操作,前提要拥有版本库 git安装 略 github注册 略 如何在g ...
- 定位 - MapKit - 基本使用
/** * Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Co ...
- iOS打电话
1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString * str=[[NSMutableString alloc] initWithFo ...
- delphi xe5 android sample
安装xe5以后demo存放的路径在 C:\users\Public\Documents\RAD Studio\12.0\Samples 另外易博龙在sourceforget上也有 svn地址为:sv ...
- pythom 安装MySQL-pythom的问题
链接一:http://blog.csdn.net/dqatsh/article/details/2418663 链接二:http://codingnow.cn/language/159.html 链接 ...
- 【HDU 4898】 The Revenge of the Princess’ Knight (后缀数组+二分+贪心+...)
The Revenge of the Princess’ Knight Problem Description There is an old country and the king fell in ...
- 读取spring配置文件的方法(spring读取资源文件)
1.spring配置文件 <bean id="configproperties" class="org.springframework.beans.factory. ...
- Visual Studio 2015 Update 1 成功安装后运行 “出现未能正确加载[XXXX]包,此问题可能是由配置更改或安装另一个扩展导致的。” 可能的解决方法
作死装Visual Studio 2015 update 1.安装过程中虽然波澜不惊,但是安装之后运行回报未能正确安装[XXXX]包.找了半天,在stackoverflow中找到了相关的问题,在问题描 ...