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 相关文章推荐
信用卡效验程序
Oct 09 PHP
PHP求小于1000的所有水仙花数的代码
Jan 10 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
php画图实例
Nov 05 PHP
PHP的pcntl多进程用法实例
Mar 19 PHP
Laravel中注册Facades的步骤详解
Mar 16 PHP
Symfony2之session与cookie用法小结
Mar 18 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
对php 判断http还是https,以及获得当前url的方法详解
Jan 15 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 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
浅谈php处理后端&接口访问超时的解决方法
2016/10/29 PHP
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
DWZ table的原生分页浅谈
2013/03/01 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
Vue项目数据动态过滤实践及实现思路
2018/09/11 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
python处理中文编码和判断编码示例
2014/02/26 Python
跟老齐学Python之不要红头文件(2)
2014/09/28 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
Python发展史及网络爬虫
2019/06/19 Python
seek引发的python文件读写的问题及解决
2019/07/26 Python
python web框架中实现原生分页
2019/09/08 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
Python通过文本和图片生成词云图
2020/05/21 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
H5仿微信界面教程(一)
2017/07/05 HTML / CSS
软件测试题目
2013/02/27 面试题
《两个铁球同时着地》教学反思
2014/02/13 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
走进科学观后感
2015/06/18 职场文书
本科毕业论文答辩稿
2015/06/23 职场文书
2015年财务人员个人工作总结
2015/07/27 职场文书
golang interface判断为空nil的实现代码
2021/04/24 Golang