php 数据库SYMFONY 2中的选择表

s4n0splo  于 2023-01-04  发布在  PHP
关注(0)|答案(1)|浏览(106)

我从symfony 2开始,我想显示一个"选择"类型的数据库中的数据,但我有一个问题:
添加操作:

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(),
    ));
}

添加表单类型. 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
a5g8bdjr

a5g8bdjr1#

它使用文件中定义的名称空间,而不是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\AddAnnoncesBundle\Entity\CategoriesAnnonce是什么,以及它们是如何联系或应该如何交互的。但我怀疑你对创建一个***表单类感到困惑***创建一个定制的field type,可能还有如何创建类层次结构以及不同的组件应该做什么。我会回顾forms chapter of the bookcustom field type cookbook entry。然后,如果您有问题,请使用实体/模型、表单和字段类型类中的相关代码创建一个关于细节的新问题。

相关问题