如何在ZF3中触发fieldset factory

时间:2018-03-04 15:37:07

标签: php factory zend-form zend-framework3 fieldset

我需要将工厂用于fieldset。我知道如何为表单执行此操作,但如何为fieldset执行此操作?

表单代码为:

namespace Application\Form;

use Application\Fieldset\Outline;
use Zend\Form\Element;
use Zend\Form\Form;

class Message extends Form
{
    public function __construct()
    {
        parent::__construct('message'); 
        $this->setAttribute('method', 'post');    
        $this->add([
            'type' => Outline::class,
            'options' => [
                'use_as_base_fieldset' => true,
            ],
        ]);
        $this->add([
            'name' => 'submit',
            'attributes' => [
                'type' => 'submit',
                'value' => 'Send',
            ],
        ]);
    }
}

如上所述,行'type' => Outline::class, 告诉解析器创建fieldset对象。但是如何告诉解析器使用自定义字段集工厂创建fieldset对象?

1 个答案:

答案 0 :(得分:2)

insertFormElementManager延伸,因此您必须将其配置为与服务管理器相同。这是一个例子

ServiceManager

使用此配置,当您致电class MyModule { function getConfig(){ return [ /* other configs */ 'form_elements' => [ // main config key for FormElementManager 'factories' => [ \Application\Fieldset\Outline::class => \Application\Fieldset\Factory\OutlineFactory::class ] ] /* other configs */ ]; } } 时,\Application\Fieldset\Outline::class将触发\Application\Fieldset\Factory\OutlineFactory::class。与FormElementManager相同的一切。您将通过服务经理调用您的fieldset;

ServiceManager

您也可以通过$container->get('FormElementManager')->get(\Application\Fieldset\Outline::class); 方法在表单/字段集中调用它;

getFormFactory

当然,您可以在工厂支持的表单扩展中使用它的名称。

如果您通过function init() { // can be construct method too, nothing wrong $this->getFormFactory()->getFormElementManager()->get(\Application\Fieldset\Outline::class); } 关键字创建,则不会触发您的工厂。