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 实用代码收集
Jan 22 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
php全角字符转换为半角函数
Feb 07 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
深入分析PHP优化及注意事项
Jul 04 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
详细分析PHP7与PHP5区别
Jun 26 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
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
微信小程序 弹幕功能简单实例
2017/02/14 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
[01:05:24]Ti4 冒泡赛第二天 iG vs NEWBEE 3
2014/07/15 DOTA
python格式化字符串实例总结
2014/09/28 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
django 多数据库及分库实现方式
2020/04/01 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
Python 创建守护进程的示例
2020/09/29 Python
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
BRASTY捷克:购买香水、化妆品、手袋和手表
2017/07/12 全球购物
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
春节请假条
2014/04/11 职场文书
一岗双责责任书
2014/04/15 职场文书
学生逃课检讨书
2015/02/17 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
python 命令行传参方法总结
2021/05/25 Python
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫