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中,文件上传
Dec 06 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
Yii 2中的load()和save()示例详解
Aug 03 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 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 XML error parsing SOAP payload on line 1
2010/06/17 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
新浪的图片新闻效果
2007/01/13 Javascript
Opacity.js
2007/01/22 Javascript
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
AngularJS实现表单验证功能详解
2017/10/12 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
Vue 实现简易多行滚动"弹幕"效果
2020/01/02 Javascript
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
利用python循环创建多个文件的方法
2018/10/25 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
简述网络文件系统NFS,并说明其作用
2016/10/19 面试题
UNIX文件名称有什么规定
2013/03/25 面试题
打架检讨书50字
2014/01/11 职场文书
三年大学生活自我鉴定
2014/01/21 职场文书
创新型城市实施方案
2014/03/06 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
Vue.Draggable实现交换位置
2022/04/07 Vue.js
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android