Как да използвате помощника за изглед на формуляр в персонализиран помощник за изглед в zend framework 2

Създавам персонализиран помощник за изгледи. и искам да знам как мога да използвам formElement "Zend\Form\View\Helper\FormElement" в моя собствен изглед помощник. Ето моят код.

use Zend\Form\ElementInterface;
use Zend\Form\FieldsetInterface;
use Zend\Form\View\Helper\FormElement;
use Zend\Form\View\Helper\AbstractHelper;
use Zend\View\Renderer\PhpRenderer;

class JudgeCareerViewHelper extends AbstractHelper {
    private $output;
    public function __invoke($formCollection) {
    foreach ($formCollection as $elementOrFieldset) {
        if ($elementOrFieldset instanceof FieldsetInterface) {
            $obj = new FormElement();
            $this->output .= $obj($elementOrFieldset->get('startServiceDate'));
        } elseif ($elementOrFieldset instanceof ElementInterface) {
            //set element markup
            echo 'element';
        }
    };
    echo $this->output;

    die();
 }
}

Когато i echo връщането на изхода от FormElement е празно. Така че отворих библиотеката zend "Zend\Form\View\Helper\FormElement", за да разбера къде е проблемът. Така че открих, че по-долу кодът се връща празен. Не знам каква е целта на $renderer = $this->getView(); и как да получа изглед.

$renderer = $this->getView();
        if (!method_exists($renderer, 'plugin')) {
            // Bail early if renderer is not pluggable
            return '';
        }

Цел на създаването на персонализиран помощник за изглед за генериране на моя собствена маркировка (HTML) вместо zend buitin html.


person Aneeq Tariq    schedule 02.09.2014    source източник


Отговори (2)


Така че открих, че кодът $renderer = $this->getView() се връща празен.

Ще трябва да се уверите, че помощникът на изгледа не се инстанцира директно чрез new, а се извиква чрез Zend\View\HelperPluginManager.

Подозирам, че проблемът е, защото не е правилно регистриран в диспечера на услугата като invokable клас.

// Module.php
public function getViewHelperConfig()
{
    return array(
        'invokables' => array(
            'JudgeCareer'
                => 'FooModule\Form\View\Helper\JudgeCareerViewHelper',  
        ),
    );
 }

Това е, за да се гарантира, че Zend\View\Renderer\PhpRenderer се инжектира като изглед.

След като JudgeCareerViewHelper инжектира 'изгледа', той ще може да извика други плъгини за изглед и да ги зареди правилно, отново чрез HelperPluginManager.

Линията:

$obj = new FormElement();

След това трябва да бъде

$object = $this->getView()->plugin('form_element');
person AlexP    schedule 02.09.2014
comment
Благодаря, решихте проблема ми. Прекарах 2 дни, за да разбера къде е проблема! Откъде знаете, че не трябва директно да инстанцирам $obj = new FormElement(); но вместо $object = $this-›getView()-›plugin('form_element'); ? - person Aneeq Tariq; 03.09.2014

Можете да извикате всеки помощник за изгледи от вашия персонализиран помощник за изгледи, като използвате

$this->getView()->anyRegisteredViewHelper();

Така че във вашия случай, за да извикате ZF2 вградените помощници за преглед на рендиране на формуляр, ще използвате:

$this->getView()->formElement($element);

При което $element е вашият обект Form Element (Select/Textarea/Checkbox и т.н.)

Разбира се, можете също да извикате изрични помощници за конкретни елементи:

$this->getView()->formTextarea($textareaElement);
person matwr    schedule 02.09.2014