《PHP学习:YII Framework的filter过滤器用法分析》要点:
本文介绍了PHP学习:YII Framework的filter过滤器用法分析,希望对您有用。如果有疑问,可以联系我们。
相关主题:YII框架
PHP应用本文实例讲述了YII Framework的filter过滤器用法.分享给大家供大家参考,具体如下:
PHP应用首先看官方给出的说明文档,什么是过滤器,过滤器的作用,过滤器的规则,过滤器的定义办法等等.
PHP应用然后对过滤器进行一个总结.
PHP应用http://www.yiiframework.com/doc/guide/1.1/zh_cn/basics.controller
PHP应用过滤器是一段代码,可被配置在控制器动作执行之前或之后执行.例如, 访问控制过滤器将被执行以确保在执行哀求的动作之前用户已通过身份验证;性能过滤器可用于测量控制器执行所用的时间.
PHP应用一个动作可以有多个过滤器.过滤器执行顺序为它们出现在过滤器列表中的顺序.过滤器可以阻止动作及后面其他过滤器的执行
PHP应用过滤器可以定义为一个控制器类的办法.办法名必须以 filter 开头.例如,现有的 filterAccessControl 办法定义了一个名为 accessControl 的过滤器. 过滤器办法必须为如下结构:
PHP应用
public function filterAccessControl($filterChain)
{
// 调用 $filterChain->run() 以继续后续过滤器与动作的执行.
}
PHP应用其中的 $filterChain (过滤器链)是一个 CFilterChain 的实例,代表与所哀求动作相关的过滤器列表.在过滤器方法中, 我们可以调用 $filterChain->run() 以继续执行后续过滤器和动作.
PHP应用过滤器也可以是一个 CFilter 或其子类的实例.如下代码定义了一个新的过滤器类:
PHP应用
class PerformanceFilter extends CFilter
{
protected function preFilter($filterChain)
{
// 动作被执行之前应用的逻辑
return true; // 如果动作不应被执行,此处返回 false
}
protected function postFilter($filterChain)
{
// 动作执行之后应用的逻辑
}
}
PHP应用要对动作应用过滤器,我们需要覆盖 CController::filters() 办法.此办法应返回一个过滤器配置数组.例如:
PHP应用
class PostController extends CController
{
......
public function filters()
{
return array(
'postOnly + edit, create',
array(
'application.filters.PerformanceFilter - edit, create',
'unit'=>'second',
),
);
}
}
PHP应用上述代码指定了两个过滤器: postOnly 和 PerformanceFilter. postOnly 过滤器是基于办法的(相应的过滤器办法已在 CController 中定义); 而 performanceFilter 过滤器是基于对象的.路径别名application.filters.PerformanceFilter 指定过滤器类文件是protected/filters/PerformanceFilter.我们使用一个数组配置 PerformanceFilter ,这样它就可被用于初始化过滤器对象的属性值.此处 PerformanceFilter 的 unit 属性值将被初始为 second.
PHP应用使用加减号,我们可指定哪些动作应该或不应该应用过滤器.上述代码中, postOnly 应只被应用于 edit 和create 动作,而 PerformanceFilter 应被应用于 除了 edit 和 create 之外的动作. 如果过滤器配置中没有使用加减号,则此过滤器将被应用于所有动作.
PHP应用过滤器功能:
PHP应用用于对拜访者和数据的过滤和对拜访操作的记录
PHP应用使用办法:
PHP应用一作为controller的一个办法.办法名以filter开头.
PHP应用
public function filterAccessControl($filterChain)
{
echo "--->filterAccessControl";
$filterChain->run();
}
PHP应用二定义对立的filter类,要求extends CFilter.
PHP应用CFilter
PHP应用
<?php
/**
* CFilter is the base class for all filters.
*
* A filter can be applied before and after an action is executed.
* It can modify the context that the action is to run or decorate the result that the
* action generates.
*
* Override {@link preFilter()} to specify the filtering logic that should be applied
* before the action, and {@link postFilter()} for filtering logic after the action.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @version $Id: CFilter.php 2799 2011-01-01 19:31:13Z qiang.xue $
* @package system.web.filters
* @since 1.0
*/
class CFilter extends CComponent implements IFilter
{
/**
* Performs the filtering.
* The default implementation is to invoke {@link preFilter}
* and {@link postFilter} which are meant to be overridden
* child classes. If a child class needs to override this method,
* make sure it calls <code>$filterChain->run()</code>
* if the action should be executed.
* @param CFilterChain $filterChain the filter chain that the filter is on.
*/
public function filter($filterChain)
{
if($this->preFilter($filterChain))
{
$filterChain->run();
$this->postFilter($filterChain);
}
}
/**
* Initializes the filter.
* This method is invoked after the filter properties are initialized
* and before {@link preFilter} is called.
* You may override this method to include some initialization logic.
* @since 1.1.4
*/
public function init()
{
}
/**
* Performs the pre-action filtering.
* @param CFilterChain $filterChain the filter chain that the filter is on.
* @return boolean whether the filtering process should continue and the action
* should be executed.
*/
protected function preFilter($filterChain)
{
return true;
}
/**
* Performs the post-action filtering.
* @param CFilterChain $filterChain the filter chain that the filter is on.
*/
protected function postFilter($filterChain)
{
}
}
PHP应用下面举例说明两种filter规则的使用:
PHP应用SiteController.php
PHP应用
<?php
class SiteController extends Controller
{
public function init()
{
//$this->layout='mylayout';
}
public function filters()
{
return array(
'AccessControl - create',
array(
'application.filters.MyFilter + create',
),
);
}
public function filterAccessControl($filterChain)
{
echo "--->filterAccessControl";
$filterChain->run();
}
public function actionCreate() {
echo "--->create action";
}
public function actionPrint() {
echo "--->print action";
}
PHP应用/www/yii_dev/testwebap/protected# tree
.
├── commands
│ ├── shell
│ ├── TestCommand.php
│ └── TestCommand.php~
├── components
│ ├── Controller.php
│ └── UserIdentity.php
├── config
│ ├── console.php
│ ├── main.php
│ └── test.php
├── controllers
│ ├── post
│ │ └── UpdateAction.php
│ ├── SiteController.php
│ ├── TestTestController.php
│ └── UserController.php
├── filters
│ └── MyFilter.php
MyFilter.php
PHP应用
<?php
class MyFilter extends CFilter
{
protected function preFilter ($filterChain)
{
// logic being applied before the action is executed
echo "-->MyFilter-->pre";
return true; // false if the action should not be executed
}
protected function postFilter ($filterChain)
{
echo "-->MyFilter-->post";
}
}
PHP应用http://www.localyii.com/testwebap/index.php?r=site/print
PHP应用--->filterAccessControl--->print action
PHP应用http://www.localyii.com/testwebap/index.php?r=site/create
PHP应用-->MyFilter-->pre--->create action-->MyFilter-->post
PHP应用
public function filters()
{
return array(
'AccessControl - create',
array(
'application.filters.MyFilter + create,print',
),
);
}
PHP应用http://www.localyii.com/testwebap/index.php?r=site/print
--->filterAccessControl-->MyFilter-->pre--->print action-->MyFilter-->post
PHP应用以上可以看到filter的具体执行流程.
PHP应用在filters中有-、+
具体功能是
+表示仅仅作用于这一些action
-后边跟action名称列表.表示排除在外.
如果没有-、+则会应用的所有的action
PHP应用更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
PHP应用希望本文所述对大家基于Yii框架的PHP程序设计有所赞助.
维易PHP培训学院每天发布《PHP学习:YII Framework的filter过滤器用法分析》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/7011.html