Я действительно не хочу вызывать фильтр Zend в моем коде после каждого getRequest-> getParam ('x'), если мне это не нужно. Есть ли ленивый способ фильтрации всего внутри getRequest волшебным образом?
Edit: Когда я говорю фильтр, я имею в виду, эскиз тегов, очистка XSS и экранирование любых символов sql escape.
то есть:
$myVar = $this->getRequest()->getParam('x'); filter the variable, escape sql stuf... etc
Какой стандарт? Как вы это делаете?
Есть несколько способов справиться с вашей ситуацией.
Прежде всего, вы можете получить все параметры сразу:
$params = $this->_request->getParams(); //_request is equivalent to getRequest()
Таким образом, ленивый способ фильтрации всех ваших параметров будет заключаться в использовании ***** при объявлении ваших фильтров, что означает все поля, и будет выглядеть примерно так:
$filters = array('*' => array('StringTrim','HtmlEntities','StripTags')); $input = new Zend_Filter_Input($filters,$validators,$params); if($input->isValid()) { //blah blah blah }
Вы должны больше узнать об объекте запроса , а также о фильтрах , фильтрах ввода и валидаторах .
Единственный способ – сделать это по-любому.
используйте Zend_Filter_Input
(как отмечалось выше, karim79), чтобы фильтровать информацию о том, как они должны быть сохранены или просмотрены (снятие тегов с помощью StripTags
, литье в Int
, StringTrim
и т. д.), проверка правильности проверки, но не htmlentities, поскольку это, вероятно, должно быть сделанные на выходе, чтобы избежать осложнений в поиске db и т. д. В большинстве случаев поля должны быть индивидуально повернуты / проверены.
использовать параметризованные запросы ( Zend_Db_Select
с? placeholders) всегда или, по крайней мере, использовать функции escape-функции db
выведите все выходные данные ( Zend_View_Helper_Escape
-> $this->escape()
) по мере необходимости.
Ответ karim79 охватывает захват параметров в одном массиве.
Как правило, для очистки данных не требуется Zend_Filter для каждого запроса.
Чтобы предотвратить XSS, вы должны избегать вывода данных в представлении:
$this->escape($someUserSuppliedData)
и при работе с Zend_Db некоторые методы, такие как вставка и обновление, будут приводить данные для вас. При построении запросов вручную вы можете использовать функции Zend_Db, такие как quote
Возможно, он ищет способ перегрузить метод getRequest () и затем фильтровать внутри нового созданного метода объект запроса.
Выезд: http://framework.zend.com/manual/en/zend.controller.plugins.html
Затем вы можете просто использовать класс Zend_Filter или создать собственный класс фильтров, перегружающий выше.