Yii2 behavior运用

 1 class ReturnDataTypeBehaviors extends Behavior
 2 {
 3
 4     public $type = ‘json‘;
 5     public $pcOrMobile = ‘pc‘; // or  mobile
 6
 7     //控制器执行之后事件
 8     public function events()
 9     {
10         return [Controller::EVENT_BEFORE_ACTION => ‘beforeType‘];
11     }
12
13     /**
14      * 返回数据类型判断
15      * @param $event
16      * @return bool
17      */
18     public function beforeType($event)
19     {
20         if ($this->pcOrMobile == ‘pc‘) {
21             if (Yii::$app->request->isAjax) {
22                 if ($this->type == ‘json‘) {
23                     Yii::$app->response->format = Response::FORMAT_JSON;
24                 } elseif ($this->type == ‘xml‘) {
25                     Yii::$app->response->format = Response::FORMAT_XML;
26                 }
27             }
28         } else {
29             if ($this->type == ‘json‘) {
30                 Yii::$app->response->format = Response::FORMAT_JSON;
31             } elseif ($this->type == ‘xml‘) {
32                 Yii::$app->response->format = Response::FORMAT_XML;
33             }
34         }
35         return true;
36     }
37
38 }

写在BaseController 里面 ,其他的控制器继承Base ,设定请求返回的数据

 1 <?php
 2
 3 namespace app\controllers;
 4
 5 use app\behaviors\ReturnDataTypeBehaviors;
 6 use app\helpers\Util;
 7 use yii\helpers\Url;
 8 use yii\web\Controller;
 9 use app\models\Configuration;
10 use Yii;
11
12 class BaseController extends Controller
13 {
14     /**
15      * 默认分页值 默认10
16     */
17     const PAGE_SIZE = 6;
18
19
20     public function behaviors()
21     {
22         return [
23
24             ‘myBehavior‘ => [
25
26                 ‘class‘ => ReturnDataTypeBehaviors::className(),
27                 # ‘type‘=>‘json‘,
28                 #‘pcOrMobile‘=>‘pc‘
29             ]
30         ];
31     }
32     public function init()
33     {
34         //设置回调url
35         $this->_redirectUrl();
36         // 登录验证
37         $this->_checkLogin();
38         //session存留时间
39         $this->_setSessionTime();
40     }
41
42     // 登录回调
43     private function _redirectUrl()
44     {
45         $redirectUrl = Yii::$app->request->url;
46
47         if ($redirectUrl == ‘/site/login‘) {
48
49             $redirectUrl = ‘/desktop‘;
50         }
51         //设置登录后的回调路径
52         Yii::$app->session->setFlash(‘redirectUrl‘, $redirectUrl);
53     }
54
55     // 权限验证
56     private function _rbac()
57     {
58
59         //超级管理员不用过滤
60
61
62     }
63
64     // 登录验证
65     private function  _checkLogin()
66     {
67         if (!(Yii::$app->request->url == ‘/site/login‘) && !Yii::$app->user->getId()) {
68         header(‘Location:‘.Yii::$app->request->getHostInfo().‘/site/login‘);
69         exit;
70     }
71
72     }
73     //弹出小框提示
74     public function TipsBox($msg=‘‘,$url=‘‘)
75     {
76
77     }
78     //设置session的存储时间
79     private function _setSessionTime()
80     {
81         Yii::$app->session->setTimeout(1440 * 2 );
82     }
83
84 }
Controller::EVENT_BEFORE_ACTION => ‘beforeType‘ 触发事件调用‘beforeType’方法 
时间: 2024-11-05 08:12:59

Yii2 behavior运用的相关文章

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

Yii2.0中的一个思想就是组件化的思想,所以.大多数的类都直接或间接的继承自yii\base\Component,而组件的三大功能:属性.事件.行为. 行为的目的是为了方便的扩展一个类的功能,而不需要直接去修改这个类,同时行为中也附带了事件的实现. 1.整体的结构 Controller和模型ActiveRecord都继承自yii\base\Component 而Component继承自yii\base\Object Object中和Component中都实现了魔术方法__get和__set以及

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

Behavior类是所有事件类的基类,它继承自object类 Behavior类的前面注释描述大概意思: * Behavior类是所有事件类的基类 * * 一个行为可以用来增强现有组件的功能,而不需要修改它的代码. * 用来增强现有组件的功能而不修改它的代码.它可以添加自己的方法和属性组件 * 使他们可以直接通过组件访问.还可以响应组件触发的事件,拦截正常的代码执行. class Behavior extends Object { /** * 要附加行为对象的组件 */ public $owne

yii2源码学习笔记(六)

Behvaior类,Behavior类是所有事件类的基类: 目录yii2\base\Behavior.php 1 <?php 2 /** 3 * @link http://www.yiiframework.com/ 4 * @copyright Copyright (c) 2008 Yii Software LLC 5 * @license http://www.yiiframework.com/license/ 6 */ 7 8 namespace yii\base; 9 10 /** 11

Yii2系列教程七:Behaviors And Validations

这一篇文章的开头就无需多言了,紧接着上一篇的内容和计划,这一篇我们来说说Yii2的Behavior和Validations. Behavior 首先我们来说说Behavior,在Yii2中Behavior主要是可以用于一些常用的Model字段当中,对其进行自动化操作,比如自动添加一些时间戳字段等,这样我们就不用在每一个需要保存记录的地方分别写生成时间戳的代码了,比如前面我们在Yii2系列教程五:简单的用户权限管理中的controllers/StatusController.php的actionC

yii2框架随笔4

接下来我们继续了解Component.php 目录为:vendor/yiisoft/yii2/base/Component.php (接上次的代码) /** * Sets the value of a component property. *设置一个组件属性的值. * This method will check in the following order and act accordingly: *这种方法将检查以下顺序并采取相应的行动: * - a property defined by

yii2 学习中

属性: public function __get($name) // 这里$name是属性名 { $getter = 'get' . $name; // getter函数的函数名 if (method_exists($this, $getter)) { return $this->$getter(); // 调用了getter函数 } elseif (method_exists($this, 'set' . $name)) { throw new InvalidCallException('G

yii2源码学习笔记(十一)

Controller控制器类,是所有控制器的基类,用于调用模型和布局. 1 <?php 2 /** 3 * @link http://www.yiiframework.com/ 4 * @copyright Copyright (c) 2008 Yii Software LLC 5 * @license http://www.yiiframework.com/license/ 6 */ 7 8 namespace yii\base; 9 10 use Yii; 11 12 /** 13 * Co

yii2框架随笔3

今天开始阅读vendor/yiisoft/yii2/base/Action.php <?php namespace yii\base;//命名空间 use Yii;//加载Yii文件夹下的Yii.php /** * Action is the base class for all controller action classes. * * Action provides a way to reuse action method code. An action method in an Acti

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

想要了解 Yii2 的话,一定要对 Yii2 中向相关类的继承关系有所了解.由于暂时读的代码有限,下面的图中只列出了部分继承关系,之后回跟着源码阅读的越来越多而增加 由上图可以看到 Yii2 中大多数类都继承自 yii\base\Object,实现了属性的功能. yii\base\Component yii\base\Event 和 yii\base\Behavior 都继承了 yii\base\Object,yii\base\Component 是一个实现了属性/事件和行为功能的基础类,yii