Yii2.0框架behaviors方法使用实例分析


Posted in PHP onSeptember 30, 2019

本文实例讲述了Yii2.0框架behaviors方法使用。分享给大家供大家参考,具体如下:

初学Yii2.0 学习路径:http://www.yii-china.com/

经过各种学习,积累知识点;

(1)控制器 behaviors 过滤数据需要引入如下文件

use yii\filters\AccessControl;
use yii\filters\VerbFilter;

首先:什么是过滤器?过滤器就是对不同用户角色的控制;

        如(游客->最普通的平民,用户->已经注册的用户,管理员->拥有一切权限)

        然而 Yii2自带的权限控制默认只支持两个角色:

  1. guest(游客,没有登录的,用 ? 表示)
  2. authenticated (登录了的,用 @ 表示)

在这里我们需要实现的是对这两种不同的角色指定不同的访问权限,就是为他们分配不同的可以访问的控制器或者方法。

目前我们如果直接点击导航栏的Status,我们还是可以在没有登录的情况之下进行发表状态(status),

所以我们需要改一下我们的代码和逻辑,Yii2在这方面的控制做得非常好,

其实实现这个我们只需要修改一下StatusController.php里面的behaviors()方法而已,

在这里面加入一段access设置:

控制器中的代码(1)

public function behaviors(){
  return [
    'access' => [
      'class' => AccessControl::className(),
      'only' => ['index', 'create', 'update'],
      'rules' => [
        // 允许认证用户
        [
          'allow' => true,
          'roles' => ['@'],
        ],
        // 默认禁止其他用户
      ],    
    ],
    'verbs' => [
      'class' => VerbFilter:: className(),
      'actions' => [
         'index' => [ 'get'],      //只允许get方式访问
         'create' => [ 'post'],     //只允许用post方式访问
         'update' => [ 'post']
       ],
    ],
  ];
}

加上access这一段之后,再次点击Status,Yii2就会将未登录的我重定向到登录页面。

重定向的方法如下:

'components' => [
    'user' => [
      'identityClass' => 'backend\system\core\UserIdentity',
      'enableAutoLogin' => true,
      'loginUrl' => ['login/login']   //此处设置默认登录页,如果未登录就会跳转到该页
    ],
    ...

用户一旦登录进来之后,我们就可以通过下面这行代码来获取用户的id了:

$userid=Yii::$app->user->getId();  //获取用户id

控制器中的案例(2)

public function behaviors()
{
    return [
      'access' => [
        'class' => AccessControl::className(),
        'only' => ['logout', 'signup', 'change-password'],
        'rules' => [
          [
            'actions' => ['signup'], //允许游客注册
            'allow' => true,
            'roles' => ['?'],
          ],
          [
            'actions' => ['logout', 'change-password'],
            'allow' => true,     //允许用户登出、修改密码
            'roles' => ['@'],
          ],
        ],
      ],
      'verbs' => [
        'class' => VerbFilter::className(),
        'actions' => [
          'logout' => ['post'],    //登出只允许提交方式为post,否则报错
        ],
      ],
    ];
}

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP获取mysql数据表的字段名称和详细信息的方法
Sep 27 PHP
Thinkphp多文件上传实现方法
Oct 31 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
smarty循环嵌套用法示例分析
Jul 19 PHP
PHP微信API接口类
Aug 22 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
Nov 17 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
PHP实现的mysql读写分离操作示例
May 22 PHP
php解决约瑟夫环算法实例分析
Sep 30 #PHP
php使用curl伪造浏览器访问操作示例
Sep 30 #PHP
laravel-admin 在列表页添加自定义按钮的例子
Sep 30 #PHP
Laravel框架控制器的request与response用法示例
Sep 30 #PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
Sep 30 #PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 #PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 #PHP
You might like
PHP如何实现订单的延时处理详解
2017/12/30 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
js截取函数(indexOf,join等)
2010/09/01 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
jQuery实现点击标题输入详细信息
2013/04/16 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
详解Js模板引擎(TrimPath)
2016/11/22 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
node crawler如何添加promise支持
2020/02/01 Javascript
原生js生成图片验证码
2020/10/11 Javascript
学习python 之编写简单乘法运算题
2016/02/27 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
假日旅行社实习自我鉴定
2013/09/24 职场文书
医学院毕业生自荐信
2013/11/08 职场文书
汽车维修与检测专业应届生求职信
2013/11/12 职场文书
七年级音乐教学反思
2014/01/26 职场文书
西安交大自主招生自荐信
2014/01/27 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书