Если я разрабатываю проект с использованием ZF2 и Doctrine, который увлажняет объект с отношением «Множество ко многим», подобное этому Doctrine hydrator tutorial, родительский набор полей будет выглядеть как это:Как ссылаться на дочерние элементы в отношениях «много-к-одному» в ZF2 и доктрине
namespace Application\Form;
use Application\Entity\BlogPost;
use Doctrine\Common\Persistence\ObjectManager;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
class BlogPostFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('blog-post');
$this->setHydrator(new DoctrineHydrator($objectManager))
->setObject(new BlogPost());
$this->add(array(
'type' => 'Zend\Form\Element\Text',
'name' => 'title'
));
$tagFieldset = new TagFieldset($objectManager);
$this->add(array(
'type' => 'Zend\Form\Element\Collection',
'name' => 'tags',
'options' => array(
'count' => 2,
'target_element' => $tagFieldset
)
));
}
public function getInputFilterSpecification()
{
return array(
'title' => array(
'required' => true
),
);
}
}
и элементы формы могут быть доступны с точки зрения, как это:
// edit.phtml:
// ...
$bpfs=$form->get('blog-post');
$tfss=$bpfs->get('tags')->getFieldsets();
$tfs=$tfss[0];
$tagName = $tfs->get('name');
// ...
Однако, если я хочу использовать много-к-одному, я не знаю, как для кодирования дочерних элементов. В BlogPost Fieldset
я предполагаю, что элемент tag
больше не является коллекцией, потому что будет только один из них. Тем не менее, тег еще FIELDSET, так что я думаю, что он идет в BlogPost Fieldset
, как это:
$tagFieldset = new TagFieldset($objectManager);
$this->add(array(
'name' => 'tag',
'options' => array(
'target_element' => $tagFieldset
)
));
(Это одна запись, поэтому я изменил название на tag
Это не коллекция, не делает. это, кажется, какие-либо другие элементы формы ZF2, поэтому я упал заявление на type
атрибут)
Тогда в представлении, я пытаюсь получить доступ к элементам формы, как это:.
// edit.phtml:
// ...
$bpfs=$form->get('blog-post');
$tfs=$bpfs->get('tag')->getFieldsets();
$tagName = $tfs->get('name');
// ...
, но это дает ошибка,
Fatal error: Call to undefined method Zend\Form\Element::getFieldsets() in …
Как это правильно закодировать?