我正在创建自定义视图助手。我想知道如何在我自己的视图帮助器中使用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();
}
}
当我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的目的。
答案 0 :(得分:1)
所以我发现,代码
$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
is injected as the view。
JudgeCareerViewHelper
拥有“观看次数”'注入后,它将能够调用其他视图插件,并通过HelperPluginManager
再次正确加载。
该行:
$obj = new FormElement();
应该是
$object = $this->getView()->plugin('form_element');
答案 1 :(得分:0)
您可以使用
从自定义视图助手中调用任何视图助手$this->getView()->anyRegisteredViewHelper();
因此,在您的情况下调用ZF2内置表单呈现视图助手,您将使用:
$this->getView()->formElement($element);
其中$ element是您的表单元素对象(选择/ Textarea / Checkbox等)
您当然也可以为特定元素调用显式助手:
$this->getView()->formTextarea($textareaElement);