Как создать список выбора со значениями из таблицы базы данных в Symfony 2?
У меня есть 2 объекта: Студент и класс с отношениями ManyToOne, и мне нужно создать форму с полями: имя , фамилия , возраст , класс (выберите список из доступных классов).
В моей студенческой форме у меня есть
$builder ->add('name') ->add('surname') ->add('age') ->add('classroom', new ClassroomType()) ;
В моей форме в классе у меня есть следующее:
$classrooms =$this->getDoctrine()->getRepository('UdoCatalogBundle:Classroom')->findAll(); $builder ->add('clasa','choice',array('choices' => array($classrooms->getId() => $classrooms->getName())));
Я получаю следующую ошибку:
Fatal error: Call to undefined method Udo\CatalogBundle\Form\ClassroomType::getDoctrine() in /var/www/html/pos/src/Udo/CatalogBundle/Form/ClassroomType.php on line 13
С уважением, Cearnau Dan
Не уверен, что вы нашли ответ, но мне просто нужно было кое-что сделать, чтобы понять это для моего собственного проекта.
Класс формы не настроен для использования Doctrine, как контроллер, поэтому вы не можете ссылаться на Entity таким же образом. То, что вы хотите сделать, это использовать тип поля объекта, который является специальным типом поля выбора, позволяющим загружать параметры из объекта Doctrine, как вы пытаетесь сделать.
Хорошо так долго рассказывал. Вместо того, чтобы делать то, что вы делаете, чтобы создать поле выбора, сделайте следующее:
->add('category', 'entity', array( 'class' => 'VendorWhateverBundle:Category', 'query_builder' => function($repository) { return $repository->createQueryBuilder('p')->orderBy('p.id', 'ASC'); }, 'property' => 'name', ))
Я не уверен, если вы можете поместить функцию query_builder в репозиторий или что, я как бы размахиваю, когда я иду. До этого момента документация, с которой я связан выше, довольно ясна, что делать. Я предполагаю, что следующий шаг – прочитать QueryBuilder Доктрины .
Пока вы там, я думаю, вы хотите сбросить бит, где вы встраиваете форму в класс,
->add('classroom', new ClassroomType())
Вероятно, вы не хотите, чтобы люди создавали свои классные комнаты. Если вы этого не сделаете, тогда да.
Если объекты отображаются, это чистое решение для Symfony 2.8+ или 3+
<?php namespace My\AppBundle\Form\Type; use My\AppBundle\Entity\Student; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class StudentType extends AbstractType { /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('name') ->add('surname') ->add('age') /* * It will be resolved to EntityType, which acts depending on your doctrine configuration */ ->add('classroom'); } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(['data_class' => Student::class]); } }