Форма выбора из базы данных SYMFONY 2

Я начинаю с Symfony 2 и хочу отобразить тип «выбор» с данными из базы данных, но у меня есть проблема:

addAction:

    public function addAction()
{
$categories = new CategoriesAnnonce();
$form = $this->get('form.factory')->create(new AddFormType($categories),$categories);
return $this->render('AnnoncesBundle::add.html.twig', array(
'form' => $form->createView(),
));
}

AddFormType.php:

    <?php

namespace AnnoncesBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Validator\Constraints as Assert;

class AddFormType extends AbstractType
{
private $cat;

public function __construct(CategoriesAnnonce $categories)
{
$this->cat = $categories->getNomSousCategorie();
}

/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('titre', 'text')
->add('categories', 'choice', array(
'choices' => $this->cat,
));
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AnnoncesBundle\Form\Model\Add',
));
}

public function getName()
{
return 'Add';
}
}

?>

Ошибка :

Catchable Fatal Error: Argument 1 passed to AnnoncesBundle\Form\Type\AddFormType::__construct() must be an instance of AnnoncesBundle\Form\Type\CategoriesAnnonce, instance of AnnoncesBundle\Entity\CategoriesAnnonce given, called in /Users/jordan/Desktop/www/Lesbonnesaffaires/src/AnnoncesBundle/Controller/DefaultController.php on line 69 and defined

1

Решение

Он использует пространство имен, определенное в файле, вместо правильного пространства имен, к которому CategoriesAnnonce принадлежит. Добавить use заявление:

use AnnoncesBundle\Entity\CategoriesAnnonce

ИЛИ измените тип подсказки на FQCN, например:

public function __construct(\AnnoncesBundle\Entity\CategoriesAnnonce, $categories) {
//...
}

Спасибо, но у меня сейчас другая проблема:

Предполагается, что данные представления формы будут экземпляром класса AnnoncesBundle \ Form \ Model \ Add, но являются экземпляром класса AnnoncesBundle \ Entity \ CategoriesAnnonce. Вы можете избежать этой ошибки, установив для параметра data_class значение null или добавив преобразователь представления, который преобразует экземпляр класса AnnoncesBundle \ Entity \ CategoriesAnnonce в экземпляр AnnoncesBundle \ Form \ Model \ Add.

Это происходит потому, что для data_class установлено значение AnnoncesBundle\Form\Model\Add:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AnnoncesBundle\Form\Model\Add',
));
}

Но вы пытаетесь передать это AnnoncesBundle\Entity\CategoriesAnnonce

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('titre', 'text')
// this cat is an instance of AnnoncesBundle\Entity\CategoriesAnnonce
->add('categories', 'choice', array(
'choices' => $this->cat,
));
}

Я думаю, вам нужно переделать свой код для всего этого. К сожалению, я не могу дать конкретику, потому что я не знаю, что AnnoncesBundle\Form\Model\Add а также AnnoncesBundle\Entity\CategoriesAnnonce и как они связаны или должны взаимодействовать. Но я подозреваю, что вы не уверены в создании форма класса и создание кастома тип поля и, возможно, как вы создаете иерархию классов и что должны делать различные компоненты. Я бы пересмотрел образует главу книги и настраиваемый тип поля. Затем, если у вас есть проблема, создайте новый вопрос об особенностях с соответствующим кодом из ваших классов Entity / Model, Form и FieldType.

2

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

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

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