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

相關問題