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 中大多数类 ...
随机推荐
- html网页音乐播放器自带播放列表
基于网页的音乐播放器demo http://pan.baidu.com/s/1dDgm7HR 自己diy了一个手机端在线音乐播放器演示地址http://shanxi2014.com/zhuandiz ...
- 学习python网络数据采集笔记-1、2章
英文不好只能看中文版的.邮电出版社翻译的真很烂. 以上是吐槽,以下是正文. 书中用的pthon 3.X版本,建议安装python3.4以上的版本,低版本的没有自带pip安装插件会比较麻烦. 下载地址: ...
- 强大DevExpress,Winform LookUpEdit 实现多列查询 gridview弹出下拉选择 z
关键代码请参考http://www.devexpress.com/Support/Center/p/K18333.aspx 最新DEMO 下载 The current GridLookUpEdit's ...
- C++ 11 笔记 (四) : std::bind
std::bind 接受一个可调用的对象,一般就是函数呗.. 还是先上代码: void func(int x, int y, int z) { std::cout << "hel ...
- Java 泛型快速排序 以sdut 1196为例
oj链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1196 Java中,Arrays.so ...
- cmd下运行java文件时,找不到或无法加载主类的解决方法
最近再看java,却被一个看似很基础的hellorworld头疼了十几分钟,百度了一下,若你在cmd下编辑及运行.java文件时报错,解决方案如下,如图所示:
- python基础知识(引用)
文章连接:http://xianglong.me/article/how-to-code-like-a-pythonista-idiomatic-python/
- 把内表 itab1 的 n1 到 n2 行内容附加到 itab2 内表中去.
语法:append lines of itab1 [ from n1 ] [ to n2 ] to itab2. DATA:BEGIN OF gt_00 OCCURS 0, l_01 ...
- WordPress 全方位优化指南(上)
作为一个全面的 WordPress 性能优化教程,本文旨在帮助读者排查 WordPress 网站的性能问题,同时也提供网站前端优化加速的建议. 如果你曾经遇到过 WordPress 管理界面加载缓慢. ...
- cisco telnet会话SESSION管理及相关Dynagen配置文件
#Lab 2-5 autostart = False [localhost] [[2621]] ram = 64 image = C:\Program Files (x86)\Dynamips\ima ...