Как использовать пользовательский помощник просмотра формы в Zend Framework 2?

Я написал помощник по представлению формы, который расширяет Zend\Form\View\Helper\FormMultiCheckbox и перезаписывает его _ 2_ метод:

<?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?


person automatix    schedule 10.04.2013    source источник


Ответы (2)


Хотя ответ Эндрюса работает, в этом нет необходимости, просто используйте имя помощника представления по умолчанию и сопоставьте его со своим классом помощника, тогда приложение будет использовать вместо этого вашего помощника

public function getViewHelperConfig() {
    return array(
        'invokables' => array(
            'formmulticheckbox' => 'MyNamespace\Form\View\Helper\FormMultiCheckbox',
        ),                
    );
}
person Crisp    schedule 11.04.2013

вот пример переопределения помощника представления:

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');
    }
    ...
}
person Andrew    schedule 10.04.2013
comment
Так делать не следует. Вы должны использовать ответ Crisp (ниже), чтобы сделать это правильно. - person emix; 21.01.2015