写应用就得接触数据…接触数据就得判断数据是否安全…
于是就有了判断、过滤。。。
Phalcon默认提供了string、email、int、float、alphanum、striptags、trim、lower、upper这几种类型的过滤方法,但若应用涉及到更复杂的数据就不够用了。。。
Phalcon这么强大的框架怎么会出现这种问题了?
先编辑下配置,将放过滤器的文件夹加入到注册文件夹中
//File:/path/app/config/config.php
<?php
return new \Phalcon\Config(array(
'database' => array(
'adapter' => 'Mysql',
'host' => 'localhost',
'username' => '',
'password' => '',
'dbname' => '',
),
'application' => array(
'controllersDir' => __DIR__ . '/../../app/controllers/',
'modelsDir' => __DIR__ . '/../../app/models/',
'viewsDir' => __DIR__ . '/../../app/views/',
'pluginsDir' => __DIR__ . '/../../app/plugins/',
'libraryDir' => __DIR__ . '/../../app/library/',
'cacheDir' => __DIR__ . '/../../app/cache/',
'extension' => __DIR__ . '/../../app/library/extension/',
'other' => __DIR__ . '/../../app/library/other/',
'baseUri' => '/',
),
));
//File:/path/app/config/loader.php
<?php
$loader->registerDirs(
array(
$config->application->controllersDir,
$config->application->modelsDir,
$config->application->libraryDir,
$config->application->customVoltf,
$config->application->extension,
$config->application->other,
)
);
在/app/library/extension/
中创建md5Filter.php
<?php
/**
*
*/
class md5Filter// extends AnotherClass
{
public function filter($value)
{
$result = array();
$time = preg_match('/^[0-9a-zA-Z]{16,32}$/', $value, $result);
if ($time > 0) {
return $result[0];
}else{
return false;
}
}
}
?>
在/app/config/services.php
中替换原过滤服务
<?php
$di->set('filter',function(){
$filter = new \Phalcon\Filter();
//用户名过滤
$filter->add('uname',new UnameFilter());
//密码过滤
$filter->add('pwd',new PwdFilter());
//MD5过滤
$filter->add('md5',new md5Filter());
return $filter;
});
//上面的用户名、密码是我自己另外添加的,后面会提供下载
在控制器中使用$this->request->getPost('tf','md5');
测试,是不是通过呢?
按照这个模板,添加过滤器是非常容易的。
其实使用匿名函数也是可以的,例如:
<?php
$di->set('filter',function(){
$filter = new \Phalcon\Filter();
$filter->add('test',function($value){return $value});
return $filter;
});
//(匿名函数的第一个参数即为需要过滤的值
当然,上面的是最简单的例子,如果需要处理更复杂的数据,匿名函数的方式就有点不够用了。。。
附件:
转载请注明:神奇海域 » Phalcon之添加自定义过滤器