2013-04-10 2 views
4

Я написал помощник вида формы, которая расширяет Zend\Form\View\Helper\FormMultiCheckbox и переписывает его метод renderOptions(...):Как использовать специальный помощник формы в Zend Framework 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; 
     ... 
    } 

} 

Следующим шагом является регистрация нового помощника вида. Я делаю это как here показано:

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?

ответ

9

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

public function getViewHelperConfig() { 
    return array(
     'invokables' => array(
      'formmulticheckbox' => 'MyNamespace\Form\View\Helper\FormMultiCheckbox', 
     ),     
    ); 
} 
-1

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

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'); 
    } 
    ... 
} 
+2

Этого не должно быть сделано таким образом. Вы должны использовать ответ Крисп (ниже), чтобы все было сделано правильно. –