如何在表单中设置实体字段的值? Symfony2的

时间:2016-09-12 14:56:52

标签: symfony

我有3个表格,inProducto,inProveedor和InProveedorProducto,这里是我的关系:

inProveedorProducto:

class InProveedorProducto
{
    /**
     * @ORM\ManyToOne(targetEntity="InProducto", inversedBy="InProveedorProducto")
     * @ORM\JoinColumn(name="id_producto", referencedColumnName="id_producto")
     */
    protected $producto;

    /**
     * @ORM\ManyToOne(targetEntity="InProveedor", inversedBy="InProveedorProducto")
     * @ORM\JoinColumn(name="id_proveedor", referencedColumnName="id")
     */
    protected $proveedor;

InProveedor:

class InProveedor
{
    /**
     * @ORM\OneToMany(targetEntity="InProveedorProducto", mappedBy="InProveedor", cascade={"persist"})
     */
    protected $proveedorProducto;

    public function __construct()
    {
        $this->proveedorProducto = new ArrayCollection();
    }

InProducto:

class InProducto
{
    /**
     * @ORM\OneToMany(targetEntity="InProveedorProducto", mappedBy="InProducto", cascade={"persist"})
     */
    protected $producto;

    public function __construct()
    {
        $this->producto = new ArrayCollection();
    }

我的问题是我必须为inProveedorProducto打开一个新表单,但是idProveedor字段应该是从先前选择的用户开始的。

我的控制器:

   public function newAction()
    {
        $entity = new InProveedorProducto();
        $form   = $this->createCreateForm($entity);

        $form->get('idProveedor')->setData(1);

        return $this->render('NivalInventarioBundle:InProveedorProducto:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView(),
        ));
    }

当我打开de form时,第一个idProveedor字段显示为1号。

然后我们选择了idProducto并提出了价格,但是在尝试创建时:

错误:

An exception occurred while executing 'INSERT INTO in_proveedor_producto (id_proveedor, id_producto, precio_compra) VALUES (?, ?, ?)' with params [null, 21, 1]:

似乎idProveedor正在变为NULL。

我的inProveedorProducto类型:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('idProveedor')
            ->add('producto', 'entity', array(
                'class' => 'NivalInventarioBundle:InProducto',
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('u')
                        ->orderBy('u.nombre', 'ASC');
                },
                'choice_label' => 'nombre',
                'by_reference' => true,
                'expanded' => false,
                'placeholder' => 'Seleccione una opción',
                'mapped' => true,
                'multiple' => false
            ))
            ->add('precioCompra')
        ;

请帮帮我。

此致

1 个答案:

答案 0 :(得分:1)

使用模型进行操作,而不是使用表单数据。

   public function newAction()
    {
        $entity = new InProveedorProducto();
        $entity->setProveedor($this->get('doctrine')->getRepository('NivalInventarioBundle:InProveedor')->find(1));
        $form   = $this->createCreateForm($entity);

        return $this->render('NivalInventarioBundle:InProveedorProducto:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView(),
        ));
    }

然后只是

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('proveedor')
            ->add('producto')
            ->add('precioCompra')
        ;