Zend_Form: удалить фильтр по умолчанию из одного элемента - PullRequest
2 голосов
/ 24 мая 2011

Я расширил Zend_Form своим собственным классом и позволил унаследовать все мои формы от этого.Мой базовый класс применяет фильтр по умолчанию ко всем элементам формы, который удаляет двойные пробелы, в основном:

return trim(preg_replace('/\s+/', ' ', $value));

Хотя обычно я хочу это для каждого элемента, бывают случаи, когда он разбивает вещи, например, наtextareas (переводы строки также удаляются), поэтому я ищу способ отключить фильтр по умолчанию для определенных элементов.Я попытался это (безуспешно):

$element->clearFilters();

однако в методе init () форм этот фильтр еще не установлен ($ element-> getFilters () возвращает пустой массив), только при вызове таких методов, как __toString() или isValid () он применяется, но я бы предпочел не перезаписывать эти методы только для того, чтобы избавиться от фильтра.Должен быть лучший способ?!

Самым чистым решением, вероятно, было бы включить этот фильтр и не применять его по умолчанию - но я бы предпочел оставить его по умолчанию и найти способ исключить определенные элементы.

1 Ответ

1 голос
/ 24 сентября 2011

скооли , ОП, уже самостоятельно ответил на вопрос:

Цитата:


Решено!

Метод setElementFilters() будет работать над всеми элементами, которые в настоящее время добавлены в форму, и применять фильтр, поэтому теперь я просто переписал этот метод, чтобы он работал следующим образом:

public function setElementFilters(array $filters) {
    foreach ($this->getElements() as $element) {
        if(!($element instanceof Zend_Form_Element_Textarea)) {
            $element->setFilters($filters);
        }
    }
    return $this;
}

Хотя он будет работать сиз всех текстовых областей я не могу исключить произвольные поля других типов.Если мне понадобится, я, вероятно, создам фиктивный фильтр, который ничего не делает, но может использоваться для определения того, следует ли исключить фильтр fixWhitespaces.


Примечание. Это абсолютно ОК, чтобы самостоятельно ответить на свой вопрос.Пожалуйста, оставьте это как реальный ответ, но , а не в вопросе или комментарии.Публикация в виде реального ответа помогает сохранить список «без ответа» более понятным (избегая того, чтобы другие люди тратили свое время).

...