有时候我们会有类似http://phalcon.com/filter/get/key1/value1/key2/value2?key3=value3&key4=value4
这样的请求。而在控制器中通过$this->dispatcher->getParams()
只能获取到key1和key2的值,并且是未过滤的。通过$this->request->getQuery()
只能获取key3和key4的值,并且批量获取也是不过滤的。
例如我们在home模块下创建Filter控制器
namespace App\Home\Controllers;
use Phalcon\Mvc\Controller;
class FilterController extends Controller {
public function getAction() {
var_dump('$this->dispatcher->getParams()方法获取参数(pathinfo参数)', $this->dispatcher->getParams());
var_dump('$this->request->getQuery()方法获取参数($_GET)', $this->request->getQuery());
exit;
}
}
当我们访问http://phalcon.com/filter/get/a/11a/b/ bbb?c=ccc&d=<script>alert(1)</script>
,就会如下图结果。
这个时候我们想封装一个便捷的获取get参数并且能过滤的功能。由于我们通常是在控制器中接受参数,所以可以创建个基类控制器来实现这个功能。
1、打开config/config.php添加全局默认配置。
// 过滤器设置
'filter' => [
// 过滤类型,支持string、trim、absint、int、email、float、int!、float!、alphanum、striptags、lower、upper、url、special_chars
'default_filter' => 'string,trim'
],
完整的config/config.php:
<?php
/**
* @desc 全局配置文件
* @author zhaoyang
* @date 2018年5月3日 下午7:54:47
*/
return [
// 服务配置
'services' => [
// 调度器配置
'dispatcher' => [
// 处理 Not-Found错误配置
'notfound' => [
// 错误码及错误提示(ajax和post请求)
'status_code' => 404,
'message' => 'Not Found',
// 错误跳转的页面
'namespace' => DEFAULT_MODULE_NAMESPACE . '\\Controllers',
'controller' => 'error',
'action' => 'error404'
],
],
// volt引擎相关配置
'view_engine_volt' => [
// 编译模板目录
'compiled_path' => BASE_PATH . 'runtime/' . DEFAULT_MODULE . '/compiled/volt' . DS,
// 是否实时编译