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运用的更多相关文章

  1. Yii2的深入学习--行为Behavior

    我们先来看下行为在 Yii2 中的使用,如下内容摘自 Yii2中文文档 行为是 [[yii\base\Behavior]] 或其子类的实例.行为,也称为 mixins,可以无须改变类继承关系即可增强一 ...

  2. Yii2.0源码阅读-behavior的实现原理

    Yii2.0中的一个思想就是组件化的思想,所以.大多数的类都直接或间接的继承自yii\base\Component,而组件的三大功能:属性.事件.行为. 行为的目的是为了方便的扩展一个类的功能,而不需 ...

  3. Yii2基本概念之——行为(Behavior)

    使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充.通过将行为绑定到一个类,可以使得类具有行为本身所具有的属性和方法,就好像是类本来就具有的这些属性和功能一样. 好的代码设计, ...

  4. YII2中behavior行为的理解与使用

    YII2中的行为说白了就是对组件功能的扩展,在不改变继承关系的条件下. 行为附加到组件后,行为将注入自已的方法和属性到组件,可以像组件访问自定义的方法和属性一样访问行为. 注意行为是对功能的扩展,不要 ...

  5. YII2中controller中的behaviors中的behavior内部是如何被使用的?

    1. behaviors方法的调用: 在祖先对象components中有一个ensureBehaviors方法,代码如下: /** * Makes sure that the behaviors de ...

  6. yii2 源码分析Behavior类分析 (四)

    Behavior类是所有事件类的基类,它继承自object类 Behavior类的前面注释描述大概意思: * Behavior类是所有事件类的基类 * * 一个行为可以用来增强现有组件的功能,而不需要 ...

  7. 忘记时间戳的存在——Yii2超实用的自动更新时间戳的Behavior(改进版)

    本文改进了Yii2中内置行为类TimestampBehavior,使得时间戳字段(如created_at,updated_at) 完全自己更新,方便得让你忘记它们的存在. Yii2的内置行为类Time ...

  8. Yii2 中禁用csrf校验

    Yii2 默认开启csrf校验,但是有些时候确实不需要校验,比如对外提供API 一般做法直接在xxController中增加属性: public $enableCsrfValidation = fal ...

  9. Yii2的深入学习--继承关系

    想要了解 Yii2 的话,一定要对 Yii2 中相关类的继承关系有所了解.由于暂时读的代码有限,下面的图中只列出了部分继承关系,之后回跟着源码阅读的越来越多而增加 由上图可以看到 Yii2 中大多数类 ...

随机推荐

  1. js函数与变量同名

    console.log(a); var a = 3; function a(){} 输出的结果是:[Function: a] 注意一下几点就能知道原因了! 1)函数声明会置顶2)变量声明也会置顶3)函 ...

  2. JVM内存管理基本概念

    java中是否存在内存泄露? 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连:其次,这些对象是无用的,即程序以后不会 ...

  3. CPU/寄存器/内存

    因为要了解多线程,自然少不了一些硬件知识的科普,我没有系统学习过硬件知识,仅仅是从书上以及网络上看来的,如果有错误请指出来. CPU,全名Central Processing Unit(中央处理器). ...

  4. NOIP2015 普及组(Junior) 解题报告

    1. 金币 (coin.cpp/c/pas) 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天),每天收到两枚金币:之后三天(第四.五.六天),每天收到三枚金币 ...

  5. 由 OR 引起的死循环

    在客商迁移测试时,程序一旦开始执行就不能自动停止.只能通过手动中断应用服务器的进程来停止.检查迁移的一个表,这个表迁移前没有数据,迁移最多会插入3w条左右数据,但是迁移过程执行2个多小时候再看,已经有 ...

  6. APNs-远程推送

    一.开发iOS程序的推送功能, iOS端需要做的事 1.请求苹果获得deviceToken 2.得到苹果返回的deviceToken 3.发送deviceToken给公司的服务器 4.监听用户对通知的 ...

  7. textarea宽度、高度自动适应处理方法

    textarea自动高度 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http: ...

  8. C#中数据库连接的配置文件

    在C#2010中,如何保存和访问数据库的连接字符串呢? 在Winform下要新增App.config文件,在Asp.net下要新增web.config文件. 1.打开配置文件添加相关代码后如下即可: ...

  9. IAR ARM、IAR STM8、IAR MSP430共用一个IDE

    转自IAR ARM.IAR STM8.IAR MSP430共用一个IDE 试了安装好多个不同版本不同编译器的IAR,终于明白不同编译器的IAR共用IDE的条件,把几个不同编译器的IAR安装在一起,共用 ...

  10. AT&T汇编中系统调用和C函数调用的使用

    我的博客:www.while0.com 区别: 系统调用的参数存储在寄存器中,函数调用的则存储在堆栈中. 系统调用使用中断方式,函数调用使用call指令 相同之处: 都有返回值和输入值 返回值都存储在 ...