2017-01-18 4 views
0

Ответ на мой вопрос ZF2 FormInput to show error class on validation fail - это создание моего собственного помощника вида формы, переопределяющего функцию render. Хотя это прекрасно работает для визуализации элементов с использованием forminput, это не помогает элементам, которые наследуют от forminput. Например, FormCheckbox наследует от forminput но не MY forminput:ZF2 change extends class

<?php 
namespace Zend\Form\View\Helper; 
//... 
class FormCheckbox extends FormInput { 
    //... 
} 

В этом случае мне нужно было бы создать другой вид в форме помощника для formcheckbox исключительно для расширения MY forminput. И снова для любых других помощников вида я хочу включить (formdate, formemail, formpassword и т. Д.).

Вместо создания нескольких помощников вида можно создать один помощник вида и указать ZF2 использовать его во всех обращениях к помощнику исходного вида при создании помощника представления ZF2?

i.e. \Zend\Form\View\Helper\FormCheckbox будет распространяться на \RPK\Form\View\Helper\FormInput, что продлит \Zend\Form\View\Helper\FormInput.

ответ

0

Я использую композитор для установки ZF2. Как композитор генерирует свои функции автозагрузки можно указать путь автозагрузки в файле composer.json:

"autoload": { 
    "psr-4": { 
     "Zend\\Form\\View\\Helper\\": "vendor/rpk/Rpk/Form/View/Helper" 
    } 
}, 

Это будет искать в моей папке поставщика для класса, прежде чем искать в папке ZEND.

Это не позволяет мне расширять FormInput, но называет его FormInput. Вызов расширений на моем FormInput помещает приложение в бесконечный цикл, поэтому нам нужно скопировать содержимое FormInput в мой класс и внести туда изменения.

0

Решение, о котором я могу думать, переписывает часть автозагрузчика.

В функции автозагрузки вы добавляете дополнительную проверку, чтобы проверить, является ли запрошенный класс \Zend\Form\View\Helper\FormInput, и если это так, вы загружаете свой собственный FormInput.

В вашем собственном FormInput вы не распространяете Zend FormInput, но вы создаете его копию и изменяете части, которые необходимо изменить.

Если ZF2 использует инъекцию зависимостей для своих помощников формы, это единственный способ, которым я могу думать (без изменения базового кода библиотеки).

0

То, что я использовал, является частичным. С частичными вы можете определить свой собственный HTML для каждого входного элемента и у вас есть доступ ко всем атрибутам и сообщений (например, ошибка-сообщения) от входного элемента:

в вашем частичном PHTML:

<?php 
    $options = $element->getOptions(); 
    $t = $this->t(); 
    $value = $element->getValue(); 
    $messages = $element->getMessages(); 
    $attr = $element->getAttributes(); 

вы можете использовать частичное так:

$this->formRow($form->get('myelement'), null, null, 'mypartial');