Как использовать пользовательский помощник вида формы в Zend Framework 2?
Я написал помощник вида, который расширяет Zend\Form\View\Helper\FormMultiCheckbox
и перезаписывает его renderOptions(...)
метод:
<?php
namespace MyNamespace\Form\View\Helper;
use Zend\Form\View\Helper\FormMultiCheckbox as ZendFormMultiCheckbox;
class FormMultiCheckbox extends ZendFormMultiCheckbox
{
protected function renderOptions(...)
{
...
$label = $escapeHtmlHelper($label);
$labelOpen = $labelHelper->openTag($labelAttributes);
switch ($labelPosition) {
case self::LABEL_PREPEND:
$template = $labelOpen . $label . $labelClose . '%s';
break;
case self::LABEL_APPEND:
default:
$template = '%s' . $labelOpen . $label . $labelClose;
break;
}
$markup = sprintf($template, $input);
$combinedMarkup[] = $markup;
...
}
}
Следующим шагом является регистрация нового помощника вида. Я делаю это, как показано здесь:
namespace Application;
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
class Module {
...
public function getViewHelperConfig() {
return array(
'invokables' => array(
'FormMultiCheckboxViewHelper' => 'MyNamespace\Form\View\Helper\FormMultiCheckbox',
)
);
}
}
Теперь мой вопрос: как я могу заставить приложение использовать мой помощник вида формы вместо Zend\Form\View\Helper\FormMultiCheckbox
?
2 ответа
Решение
Хотя ответ Эндрюса работает, в этом нет необходимости, просто используйте имя помощника вида по умолчанию и сопоставьте его с вашим классом помощника, тогда приложение будет использовать вместо этого ваш помощник
public function getViewHelperConfig() {
return array(
'invokables' => array(
'formmulticheckbox' => 'MyNamespace\Form\View\Helper\FormMultiCheckbox',
),
);
}
Вот пример переопределения помощника вида:
http://ctrl-f5.net/php/zf2-servicemanager-custom-viewhelpers/
Пример:
class Module {
public function onBootstrap(MvcEvent $mvcEvent)
{
$application = $mvcEvent->getApplication();
$serviceManager = $application->getServiceManager();
$viewHelperManager = $serviceManager->get('ViewHelperManager');
$viewHelperManager->setInvokableClass('formmulticheckbox', 'MyNamespace\Form\View\Helper\FormMultiCheckbox');
}
...
}