How to use a custom form view helper in Zend Frame

2020-03-24 07:20发布

I wrote a form view helper, that extends the Zend\Form\View\Helper\FormMultiCheckbox and overwrites its renderOptions(...) method:

<?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;
        ...
    }

}

The next step is to register the new view helper. I'm doing this like here shown:

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',
            )
        );
    }
}

Now my question: How can I make the application use my form view helper instead of Zend\Form\View\Helper\FormMultiCheckbox?

2条回答
别忘想泡老子
2楼-- · 2020-03-24 07:32

Although Andrews answer works, it's not necessary, just use the default view helper name and map it to your helper class, the application will then use your helper instead

public function getViewHelperConfig() {
    return array(
        'invokables' => array(
            'formmulticheckbox' => 'MyNamespace\Form\View\Helper\FormMultiCheckbox',
        ),                
    );
}
查看更多
迷人小祖宗
3楼-- · 2020-03-24 07:48

here's an example of overriding a view helper:

http://ctrl-f5.net/php/zf2-servicemanager-custom-viewhelpers/


Example:

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');
    }
    ...
}
查看更多
登录 后发表回答