2013-04-10 77 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

虽然安卓答案的作品,这是没有必要的,只要使用默认的视图助手名并将其映射到您的辅助类,应用程序将使用你的助手,而不是

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

这不应该这样做。你应该使用Crisp的回答(下面)来完成这个工作。 – 2015-01-21 15:21:38

相关问题