2011-01-31 4 views
1

При использовании Zend_Form, если элемент недействителен, форма возвращает ошибки в виде неупорядоченного списка. Как это изменить, чтобы вместо этого использовать теги абзацев?Как изменить тег, используемый Zend_View_Helpers_FormErrors?

Я попытался загрузки Ошибки декоратора для элементов и вызова setOptions() передать в кучу тегов, чтобы заменить уль/li материал используется Zend_Form_Decorator_FormErrors, но это не сработало =/Вместо Zend_Form_Decorator_Errors просто положить параметры как пары атрибут/значение в теге ul.

ответ

2

Вместо расширения декоратора ошибок я расширил вспомогательный элемент formErrors, чтобы он принимал и обрабатывал параметры в массиве. Помощник formErrors вид имеет сеттеров, чтобы позволить мне изменить теги используются:

class My_View_Helper_FormErrors extends Zend_View_Helper_FormErrors 
{ 
    public function formErrors($errors, array $options = null) 
    { 
     if(key_exists('htmlElementStart', $options)) 
     { 
     $this->setElementStart($options['htmlElementStart']); 
     unset($options['htmlElementStart']); 
     } 
     if(key_exists('htmlElementEnd', $options)) 
     { 
     $this->setElementEnd($options['htmlElementEnd']); 
     unset($options['htmlElementEnd']); 
     } 
     if(key_exists('htmlElementSeparator', $options)) 
     { 
     $this->setElementSeparator($options['htmlElementSeparator']); 
     unset($options['htmlElementSeparator']); 
     } 
     return parent::formErrors($errors, $options); 
    } 
} 

Чтобы передать параметры, я декоратор ошибки и setOptions() на нем:

$element->getDecorator()->setOptions(
    array(
    'class' => 'error', 
    'htmlElementStart' => '<p%s>', 
    'htmlElementEnd' => '</p>', 
    'htmlElementSeparator' => '<br/>' 
) 
); 

И сказать элементы загрузить вспомогательный путь:

$element->getView()->addHelperPath('My/View/Helper', 'My_View_Helper'); 
1

К сожалению, вы не можете изменить формат вывода, просто передав кучу параметров. Если вы хотите изменить это поведение, у вас нет выбора, кроме как написать собственный декоратор ошибок (скорее всего это производная от оригинального декоратора Errors). У этого нового декоратора должен быть перезаписан его метод render(), чтобы иметь возможность называть ваш собственный помощник вида (вместо помощника formErrors, который по умолчанию использует ZF).

+0

Я пришел к такому же выводу и уже начал это делать. Я дам вам знать, как я продвигаюсь. –

+0

Декораторы ошибок прокси-серверы к помощнику formErrors (который мы оба уже знали). Вместо того, чтобы переписать метод decorator render(), я расширил помощник formErrors, чтобы принять и обработать массив параметров. –

+0

Именно это я и сделал. – akond

Смежные вопросы