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读取csv文件内容的详解
Jun 18 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
php文件夹的创建与删除方法
Jan 24 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
帝国cms目录结构分享
Jul 06 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
PHP添加图片水印、压缩、剪切的封装类
Aug 17 PHP
Yii中Model(模型)的创建及使用方法
Dec 28 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 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高自定义性安全验证码代码
2011/11/27 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
在textarea文本域中显示HTML代码的方法
2007/03/06 Javascript
非常漂亮的JS代码经典广告
2007/10/21 Javascript
JavaScript 无符号右移运算符
2009/04/17 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
深入浅析var,let,const的异同点
2018/08/07 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
vue-model实现简易计算器
2020/08/17 Javascript
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
Python使用metaclass实现Singleton模式的方法
2015/05/05 Python
详解Swift中属性的声明与作用
2016/06/30 Python
python logging日志模块以及多进程日志详解
2018/04/18 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
经典C++面试题一
2016/11/06 面试题
应届生污水处理求职信
2013/11/06 职场文书
七年级历史教学反思
2014/02/05 职场文书
论文诚信承诺书
2014/05/23 职场文书
夫妻房产协议书的格式
2014/10/11 职场文书
工作一年自我鉴定
2019/06/20 职场文书
深度学习详解之初试机器学习
2021/04/14 Python
Promise静态四兄弟实现示例详解
2022/07/07 Javascript