位置: 编程技术 - 正文

PHP的Yii框架中过滤器相关的使用总结(php框架实例)

编辑:rootadmin

推荐整理分享PHP的Yii框架中过滤器相关的使用总结(php框架实例),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php yii框架,php框架symfony,php框架运行原理,php框架ci,php框架选择2021,php框架ci,php框架选择2021,php yii框架,内容如对您有帮助,希望把文章链接给更多的朋友!

Yii过滤器简介

过滤器是一段代码,可被配置在控制器动作执行之前或之后执行。例如, 访问控制过滤器将被执行以确保在执行请求的动作之前用户已通过身份验证;性能过滤器可用于测量控制器执行所用的时间。

一个动作可以有多个过滤器。过滤器执行顺序为它们出现在过滤器列表中的顺序。过滤器可以阻止动作及后面其他过滤器的执行。

过滤器有两种写法:

基于方法的过滤器 基于自定义过滤器类的过滤器

无论哪种过滤器,都必须在控制器中重写控制器的public function filters()方法,设置哪个过滤器对哪个动作起作用。

基于方法的过滤器

编写基于方法的过滤器,要经过三步:

在控制器中编写动作(Action);在控制器中编写过滤器函数,函数名必须以filter为前缀,如:function filterAccessControl();重写父类CController的filters()方法,定义过滤器与动作的关系;实例:

自定义过滤器类

自定义过滤器类,需要单独写一个过滤器类,并继承CFilter类,重写CFilter类下的部分方法。大家可以看一下CFilter类的代码,该类代码不多,还是很容易看懂的。

自定义过滤器实例:

在控制器中注册该自定义过滤器与动作的绑定关系:

我自定义了一个过滤器:TestFilter,继承了CFilter类,重写了CFilter类的两个主要方法:preFilter(前控制器,在动作执行前运行)和postFilter(后控制器,在动作执行后运行)。

两种控制器的执行顺序

假设我将上面编写的自定义过滤器类与动作actionAdd绑定,那么,自定义过滤器继承自父类CFilter两个方法:preFilter和postFilter,与绑定的actionAdd之间的执行顺序是怎样的呢?

经过试验,执行顺序为:CFilter::preFilter--------->UserController::actionAdd--------->CFilter::postFilter。

也就是说,在动作执行前后都可以执行过滤操作。

那么文章开头说“过滤器可以阻止动作及后面其他过滤器的执行”是怎么做到的呢?

看了CFilter::preFilter的官方注释就知道了:

@return boolean whether the filtering process should continue and the action should be executed。

CFilter::preFilter函数默认return true;即,默认执行后面的动作和后过滤器。如果在自定义过滤器类中,重写CFilter::preFilter方法,并return false;就可以阻止后面的动作和过滤器执行了!

使用过滤器

过滤器本质上是一类特殊的 行为,所以使用过滤器和 使用 行为一样。 可以在控制器类中覆盖它的 yiibaseController::behaviors() 方法来申明过滤器,如下所示:

控制器类的过滤器默认应用到该类的 所有 动作,你可以配置yiibaseActionFilter::only属性明确指定控制器应用到哪些动作。 在上述例子中,HttpCache 过滤器只应用到index和view动作。 也可以配置yiibaseActionFilter::except属性使一些动作不执行过滤器。

除了控制器外,可在 模块或应用主体 中申明过滤器。 申明之后,过滤器会应用到所属该模块或应用主体的 所有 控制器动作, 除非像上述一样配置过滤器的 yiibaseActionFilter::only 和 yiibaseActionFilter::except 属性。

补充: 在模块或应用主体中申明过滤器,在yiibaseActionFilter::only 和 yiibaseActionFilter::except 属性中使用路由 代替动作ID, 因为在模块或应用主体中只用动作ID并不能唯一指定到具体动作。.当一个动作有多个过滤器时,根据以下规则先后执行:

预过滤

按顺序执行应用主体中behaviors()列出的过滤器。 按顺序执行模块中behaviors()列出的过滤器。 按顺序执行控制器中behaviors()列出的过滤器。 如果任意过滤器终止动作执行,后面的过滤器(包括预过滤和后过滤)不再执行。 成功通过预过滤后执行动作。

后过滤

倒序执行控制器中behaviors()列出的过滤器。 倒序执行模块中behaviors()列出的过滤器。 倒序执行应用主体中behaviors()列出的过滤器。PHP的Yii框架中过滤器相关的使用总结(php框架实例)

创建过滤器

继承 yiibaseActionFilter 类并覆盖 yiibaseActionFilter::beforeAction() 和/或 yiibaseActionFilter::afterAction() 方法来创建动作的过滤器,前者在动作执行之前执行,后者在动作执行之后执行。 yiibaseActionFilter::beforeAction() 返回值决定动作是否应该执行, 如果为false,之后的过滤器和动作不会继续执行。

下面的例子申明一个记录动作执行时间日志的过滤器。

核心过滤器

Yii提供了一组常用过滤器,在yiifilters命名空间下,接下来我们简要介绍这些过滤器。

1.yiifiltersAccessControl

AccessControl提供基于yiifiltersAccessControl::rules规则的访问控制。 特别是在动作执行之前,访问控制会检测所有规则并找到第一个符合上下文的变量(比如用户IP地址、登录状态等等)的规则, 来决定允许还是拒绝请求动作的执行,如果没有规则符合,访问就会被拒绝。

如下示例表示表示允许已认证用户访问create 和 update 动作,拒绝其他用户访问这两个动作。

2.认证方法过滤器

认证方法过滤器通过HTTP Basic Auth或OAuth 2 来认证一个用户,认证方法过滤器类在 yiifiltersauth 命名空间下。

如下示例表示可使用yiifiltersauthHttpBasicAuth来认证一个用户,它使用基于HTTP基础认证方法的令牌。 注意为了可运行,yiiwebUser::identityClass 类必须 实现 yiiwebIdentityInterface::findIdentityByAccessToken()方法。

认证方法过滤器通常在实现RESTful API中使用。

3.yiifiltersContentNegotiator

ContentNegotiator支持响应内容格式处理和语言处理。 通过检查 GET 参数和 Accept HTTP头部来决定响应内容格式和语言。

如下示例,配置ContentNegotiator支持JSON和XML响应格式和英语(美国)和德语。

在应用主体生命周期过程中检测响应格式和语言简单很多, 因此ContentNegotiator设计可被引导启动组件调用的过滤器。 如下例所示可以将它配置在应用主体配置。

补充: 如果请求中没有检测到内容格式和语言,使用formats和languages第一个配置项。4.yiifiltersHttpCache

HttpCache利用Last-Modified 和 Etag HTTP头实现客户端缓存。例如:

5.yiifiltersPageCache

PageCache实现服务器端整个页面的缓存。如下示例所示,PageCache应用在index动作, 缓存整个页面秒或post表的记录数发生变化。它也会根据不同应用语言保存不同的页面版本。

6.yiifiltersRateLimiter

RateLimiter 根据 漏桶算法 来实现速率限制。

7.yiifiltersVerbFilter

VerbFilter检查请求动作的HTTP请求方式是否允许执行,如果不允许,会抛出HTTP 异常。 如下示例,VerbFilter指定CRUD动作所允许的请求方式。

8.yiifiltersCors

跨域资源共享 CORS 机制允许一个网页的许多资源(例如字体、JavaScript等) 这些资源可以通过其他域名访问获取。 特别是JavaScript's AJAX 调用可使用 XMLHttpRequest 机制,由于同源安全策略该跨域请求会被网页浏览器禁止. CORS定义浏览器和服务器交互时哪些跨域请求允许和禁止。

yiifiltersCors 应在 授权 / 认证 过滤器之前定义,以保证CORS头部被发送。

Cors 可转为使用 cors 属性。

cors['Origin']: 定义允许来源的数组,可为['*'] (任何用户) 或 [' ' 默认为 ['*']. cors['Access-Control-Request-Method']: 允许动作数组如 ['GET', 'OPTIONS', 'HEAD']. 默认为 ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']. cors['Access-Control-Request-Headers']: 允许请求头部数组,可为 ['*'] 所有类型头部 或 ['X-Request-With'] 指定类型头部. 默认为 ['*']. cors['Access-Control-Allow-Credentials']: 定义当前请求是否使用证书,可为 true, false 或 null (不设置). 默认为null. cors['Access-Control-Max-Age']: 定义请求的有效时间,默认为 .

例如,允许来源为 和方式为 GET, HEAD 和 OPTIONS 的CORS如下:

可以覆盖默认参数为每个动作调整CORS 头部。例如,为login动作增加Access-Control-Allow-Credentials参数如下所示:

PHP的邮件群发系统phplist配置方法详细总结 本文实例讲述了PHP的邮件群发系统phplist配置方法。分享给大家供大家参考,具体如下:phplist是一个十分不错的邮件群发系统,让我们可以很方便地群发

phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法 本文实例讲述了phplist及phpmailer通过gmail发送邮件的配置方法。分享给大家供大家参考,具体如下:一般来说,只要你使用的不是gmail邮箱,那么利用phplis

PHP记录页面停留时间的方法 本文实例讲述了PHP记录页面停留时间的方法。分享给大家供大家参考,具体如下:首先在要监控的页面添加JS如下scriptvardt1=newDate();window.onbeforeunload=functi

标签: php框架实例

本文链接地址:https://www.jiuchutong.com/biancheng/293318.html 转载请保留说明!

上一篇:简介PHP的Yii框架中缓存的一些高级用法(php的框架有哪些)

下一篇:PHP的邮件群发系统phplist配置方法详细总结(php 邮件发送)

  • 适用综合所得税率表
  • 申报纳税的意思
  • 税盾是怎么产生的
  • 高校报销需要增值税专用发票吗
  • 什么时候库存商品什么时候主营业务收入
  • 卖废品开发票开什么货物名称
  • 印花税购销合同包括哪些
  • 增值税普通发票需要交税吗
  • 电影剧本稿费代扣代缴个人所得税如何处理?
  • 老板垫付的费用怎么做凭证
  • 分公司帮总公司付款怎么做分录
  • 商品买一送一是打五折吗
  • 建筑行业会计如何合理避税
  • 租个人房子开发票税率是多少
  • 企业合同约定调岗不接受辞退没赔偿成立吗
  • 简述资产的概念特征以及确认条件
  • 家具属于固定资产什么类别
  • microsoft edge怎么改成ie11
  • 无形资产一般采用直线法摊销也可采用加速法进行摊销
  • 新成立企业什么时候有财务报表
  • 公司回购股份有什么好处
  • 收到客户付款 会计分录
  • fast processing
  • 苹果手机抖音投屏到电视怎么投屏
  • u启动pe装机工具怎么重装系统
  • linux小技巧
  • 员工出差补贴怎么入账
  • 收回已确认的坏账准备
  • 期间费用计入什么科目
  • 贷款和应收款项应采用实际利率法,按摊余成本计量
  • vue app打包
  • phpswoole面试
  • 合伙人资本属于股东吗
  • php中数组的常用函数及用法
  • javaweb实现用户登录注册
  • lvs命令详解
  • python opencv如何获取图片尺寸
  • 交上年企业所得税多少
  • 红字发票抵扣联要装订到凭证里吗
  • 个人申请给公司账户转账
  • 开办费新会计准则
  • mysql存二进制用哪个字段
  • 商品售后回购分录
  • 预计表示什么意思
  • 小额支出的两种形式
  • 已经认证尚未抵扣的发票
  • Mysql创建通用设备管理信息系统数据库
  • MySQL5.6 Replication主从复制(读写分离) 配置完整版
  • 政府补助收入的现金流属于什么
  • 利息收入管理办法
  • 支付宝提现到对公账户要收手续费吗
  • 代理服务费如何缴纳
  • 外商投资有限合伙企业
  • 个体工商户怎样申报个税流程
  • 收取物业费不开发票
  • 餐饮无票收入怎么做账
  • 电子商务会计科目有哪些
  • 银行存款利息应计入
  • 两家公司的钱混着用怎么做账
  • 代发工资业务流程
  • 盈亏平衡点怎么计算公式
  • navicat 导入
  • macbook和windows
  • win2003设置自动重启
  • 电脑怎么换系统教程
  • csrsyncmlserver.exe是什么文件
  • macbookpro屏幕显示
  • Win10打开或关闭系统图标里开怎么灰色的
  • win10系统开机桌面图标不见了
  • win7系统英雄联盟黑屏
  • win8怎么打开磁盘管理
  • Unable to execute dex: Multiple dex files define Lorg/cocos2dx/lib/Cocos2dxAccelerometer
  • cordova怎么样
  • opengl教程48讲
  • numpy入门
  • javascript基础入门视频教程
  • 音频资料下载
  • 15号扣税
  • 天津税务查询电话
  • 实地税务稽查需注意什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设