[英]How to create custom form element in Zend Framework 2?
我如何在ZF2中使用自定義驗證器創建自定義表單元素? 我想創建使用jQuery的自定義類別選擇器,並且應該從phtml腳本呈現此元素的內容。 在ZF1中它很容易但在ZF2中我不知道從哪里開始。
表單元素必須實現Zend\\Form\\ElementInterface
。 默認類是Zend\\Form\\Element
,您可以將其用作基本形式:
<?php
namespace MyModule\Form\Element;
use Zend\Form\Element;
class Foo extends Element
{
}
CUSTOM VALIDATOR
您可以讓元素直接指定自定義驗證器。 然后你必須實現Zend\\InputFilter\\InputProviderInterface
:
<?php
namespace MyModule\Form\Element;
use Zend\Form\Element;
use Zend\InputFilter\InputProviderInterface;
use MyModule\InputFilter\Bar as BarValidator;
class Foo extends Element implements InputProviderInterface
{
protected $validator;
public function getValidator()
{
if (null === $this->validator) {
$this->validator = new BarValidator;
}
return $this->validator;
}
public function getInputSpecification()
{
return array(
'name' => $this->getName(),
'required' => true,
'validators' => array(
$this->getValidator(),
),
);
}
}
定制渲染
目前,Zend Framework處理自定義表單元素類型的呈現方式有點復雜。 通常,它只返回普通的<input type="text">
元素。
有一個選項,那么你必須覆蓋Zend\\Form\\View\\Helper\\FormElement
助手。 它已注冊為formelement
,您必須在自定義模塊中覆蓋此視圖助手:
namespace MyModule;
class Module
{
public function getViewHelperConfig()
{
return array(
'invokables' => array(
'formelement' => 'MyModule\Form\View\Helper\FormElement',
'formfoo' => 'MyModule\Form\View\Helper\FormFoo',
),
);
}
}
此外,Zend Framework 2中的每個表單元素都由一個視圖助手呈現。 因此,您為自己的元素創建一個視圖助手,它將呈現元素的內容。
然后你必須創建自己的表單元素助手( MyModule\\Form\\View\\Helper\\FormElement
):
namespace MyModule\Form\View\Helper;
use MyModule\Form\Element;
use Zend\Form\View\Helper\FormElement as BaseFormElement;
use Zend\Form\ElementInterface;
class FormElement extends BaseFormElement
{
public function render(ElementInterface $element)
{
$renderer = $this->getView();
if (!method_exists($renderer, 'plugin')) {
// Bail early if renderer is not pluggable
return '';
}
if ($element instanceof Element\Foo) {
$helper = $renderer->plugin('form_foo');
return $helper($element);
}
return parent::render($element);
}
}
最后一步,創建視圖助手以呈現此特定表單元素:
namespace MyModule\Form\View\Helper;
use Zend\Form\ElementInterface;
use Zend\Form\View\Helper\AbstractHelper;
class Foo extends AbstractHelper
{
public function __invoke(ElementInterface $element)
{
// Render your element here
}
}
如果要為此表單元素呈現.phtml文件,請將其加載到此幫助程序中:
namespace MyModule\Form\View\Helper;
use Zend\Form\ElementInterface;
use Zend\Form\View\Helper\AbstractHelper;
class Foo extends AbstractHelper
{
protected $script = 'my-module/form-element/foo';
public function render(ElementInterface $element)
{
return $this->getView()->render($this->script, array(
'element' => $element
));
}
}
它將呈現my-module/form-element/foo.phtml
,在此腳本中,您將擁有一個包含特定表單元素的變量$element
element。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.