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 str_replace的替换漏洞
Mar 15 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
php实现RSA加密类实例
Mar 26 PHP
php关键字仅替换一次的实现函数
Oct 29 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
PHP开发之用微信远程遥控服务器
Jan 25 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 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的ob_start来生成静态页面的方法分析
2011/03/09 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
php内嵌函数用法实例
2015/03/20 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
vue的一个分页组件的示例代码
2017/12/25 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
Node在Controller层进行数据校验的过程详解
2020/08/28 Javascript
Vant 中的Toast设置全局的延迟时间操作
2020/11/04 Javascript
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
Python实现结构体代码实例
2020/02/10 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
函授本科毕业生自我鉴定
2013/10/16 职场文书
电子商务应届生求职信
2013/11/16 职场文书
幼儿园秋游活动方案
2014/01/21 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
党的群众路线教育实践活动宣传标语口号
2014/06/06 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
综合测评自我评价
2015/03/06 职场文书
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript