Я следил за zend Расширенное использование формы для решения моей проблемы.
Сценарий: у меня есть два набора полей. JudgesFieldset и JudgesCareerFieldset (у одного судьи несколько карьер, поэтому мне нужно использовать коллекцию в наборе полей для судей). JudgesCareerFieldset имеет зависимость диспетчера объектов доктрины 2 для создания элемента select и создания службы JudgesCareerFieldset в module.php, как описано в Расширенное использование форм. Все в порядке, работает и успешно создает форму. Код и пример показаны ниже.
class JudgesCareerFieldset extends Fieldset implements InputFilterProviderInterface {
private $entityManager;
public function __construct(ObjectManager $entityManager) {
parent::__construct('judges-career');
$this->entityManager = $entityManager;
$this->setHydrator(new DoctrineHydrator($entityManager))
->setObject(new Judges());
//fields of the entity
}
и
class JudgesFieldset extends Fieldset implements InputFilterProviderInterface {
private $entityManager;
public function __construct(ObjectManager $entityManager) {
parent::__construct('judges');
$this->entityManager = $entityManager;
$this->setHydrator(new DoctrineHydrator($entityManager))
->setObject(new Judges());
//Remaining Fields of the Judge entities
}
public function init() {
$this->add(array(
'type' => 'Zend\Form\Element\Collection',
'name' => 'judgeCareer',
'options' => array(
'label' => 'Please Judge Career',
'count' => 2,
'should_create_template' => true,
'allow_add' => true,
'target_element' => array(
'type' => 'CaseLaw\Judges\Form\JudgesCareerFieldset'
),
),
));
}}
и код формы
class JudgesFieldsetForm extends Form {
public function __construct(ObjectManager $entityManager) {
parent::__construct('Judges');
$this->setAttribute('method', 'post')
->setHydrator(new DoctrineHydrator($entityManager));
$judgesFieldset = new \Caselaw\Judges\Form\JudgesFieldset($entityManager);
$judgesFieldset->setUseAsBaseFieldset(true);
$this->add($judgesFieldset);
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Add Judge',
'id' => 'submit',
'class' => 'btn btn-primary'
),
));
}}
Проблема: в сценарии просмотра, когда я пытался отобразить коллекцию, отображалась ошибка "Нет элемента с именем [judgeCareer] в форме". Как я могу получить коллекцию JudgeCareer?
Ошибка: