Нет сомнений, декораторы могут привыкнуть. Позвольте мне обратиться / ответить на некоторые ваши вопросы / вопросы:
в значительной степени рвал на себе волосы из-за того, как плохо оформлены декораторы в Zend Framework. Я потратил много времени сегодня и несколько других дней, пытаясь понять, как сделать что-то, что должно быть простой задачей веб-интерфейса.
Да, это чудо, у меня вообще остались волосы.
Zend_Forms и декораторы, на мой взгляд, являются худшей частью ZF, так как бэкэнд и фронтенд не разделены должным образом. Почему класс формы определяет, как должен быть напечатан HTML-код?
Я согласен с вами здесь, что вопрос о том, как форма должна быть отображена, является проблемой презентации, так что, вероятно, она больше связана с просмотром. Если вы действительно хотите разделить проблемы, вы можете создать свои формы без декорации, а затем добавить декораторы в свой скрипт вида, возможно, с помощью некоторых пользовательских помощников вида. Это имеет смысл для меня, хотя я признаюсь, что никогда не удосужился сделать это.
Для примеров автономного класса, который устанавливает декораторы в отдельной форме, посмотрите EasyBib_Form_Decorator и Использование Zend_Form без Zend Framework MVC
По моему мнению, он должен либо взять шаблон (из внешнего интерфейса с доступом к папке / views /, либо я должен иметь возможность сделать что-то вроде:
Вы в значительной степени обладаете этой функциональностью, используя ViewScript decorator .
$form->setDecorators(array(
array('ViewScript', array( // note case
'viewScript' => '_partials/forms/my.phtml', // note case
)));
Тем не менее, желаемая разметка относительно проста с использованием стандартных декораторов:
// not tested, but should be pretty close
$element->setDecorators(array(
'ViewHelper',
'Label',
'Errors',
array('HtmlTag', array('tag' => 'div', 'attribs' => array('class' => 'labeledField'))),
));
Конечно, на эту разметку на стороне клиента можно наложить любую специальную стилизацию или манипулирование на стороне клиента формой - например, эффект корзины Apple, на который вы ссылаетесь -