Как запустить фабрику fieldset в ZF3

Мне нужно использовать фабрику для 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 с фабрикой настраиваемого fieldset?

1

Решение

FormElementManager простирается от 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, Все так же как 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);
}

И, конечно же, вы можете использовать его имя в расширениях форм, поддерживаемых на заводе.

НО если вы создаете это через new Ключевое слово, ваша фабрика не будет запущена.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]