我使用类似于skeleton application tutorial的数组符号为我的ZF2表单创建提交按钮:
$this->add(array(
'name' => 'submit',
'type' => 'Submit',
'attributes' => array(
'value' => 'Go',
'id' => 'submitbutton',
),
));
如果我将我的项目从相册列表扩展到书籍列表,DVD列表,宠物列表,YuGiOhCards列表等;每个新模块都需要自己的形式。很容易重写相同的代码,为每个表单添加一个提交按钮;但为了确保一致性,在一个位置编写一次提交按钮并从每个表单类中调用它是有意义的。
如果我想重复使用" global"提交按钮,我在哪里编码,我该怎么称呼它?
答案 0 :(得分:1)
您可以使用表单元素管理器;这是一个专门的表单元素服务管理器,提供所有常用的可重用服务和使用工厂的DI。
例如,您可以将按钮作为服务提供。
'form_elements' => [
'factories' => [
'MySubmitButton' => 'MyModule\Form\Element\MySubmitButtonFactory',
],
],
然后创建工厂。
namespace MyModule\Form\Element;
use Zend\Form\Element\Submit;
class MySubmitButtonFactory
{
public function __invoke($formElementManager, $name, $requestedName)
{
$element = new Submit('submit');
$element->setAttributes([
'value' => 'Go',
'id' => 'submitbutton'
]);
return $element;
}
}
当您需要将其添加到表单时,您应首先从FormElementManager
服务中获取该元素。
$formElementManager = $serviceManager->get('FormElementManager');
$button = $formElementManager->get('MySubmitButton');
或者当您需要在表单中添加配置时,表单工厂将使用type
键并从FormElementManager
拉出来。
$this->add([
'name' => 'submit',
'type' => 'MySubmitButton',
]);
答案 1 :(得分:0)
您可以使用traits。
只需创建包含addSubmit()
方法
protected function addSubmit()
{
$this->add([
'name' => 'submit',
'type' => 'Submit',
'attributes' => [
'value' => 'Go',
'id' => 'submitbutton',
],
]);
}
并在表单中使用它。
class MyForm extends Form
{
use SubmitButtonFormTrait;
// ...
public function __construct($name = null)
{
parent::__construct('customName');
// ...
$this->addSubmit();
}
}