Я начинаю с 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
Он использует пространство имен, определенное в файле, вместо правильного пространства имен, к которому 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.
Других решений пока нет …