Symfony3无法在表单生成期间加载类型错误

时间:2016-10-18 13:27:32

标签: php forms symfony

我正在尝试在Symfony 3中构建一个表单,并且我遇到了一些问题,我认为应该解决这个问题,但我想我不是在寻找正确的地方。

我有2个对象,实体和供应商。 1个实体确实有1个与之关联的供应商。 1个供应商可以拥有许多与之相关的实体。 (一对多协会)。

我正在尝试为Entity类构建表单,并提供一个下拉列表,提供必须与之关联的供应商。

这是实体表单类:

<?php

namespace VP\SupplierBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use VP\SupplierBundle\Entity\Supplier;
use VP\SupplierBundle\Repository\SupplierRepository;

class EntityType extends AbstractType {

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('name')
                ->add('supplier', Supplier::class, array(
                    'class' => 'VPSupplierBundle:Supplier',
                    'property' => 'name',
                    'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
                        return $er->findAllByIsDeleted(0);
                    },
                    'choice_label' => 'name'
                ))
                ->add('submitnew', SubmitType::class, array(
                    'label' => 'Add Entity',
                    'attr' => array(
                        'class' => 'btn btn-primary',
        )));
    }

这是我的SupplierRepository,应该被称为:

<?php

namespace VP\SupplierBundle\Repository;

use Doctrine\ORM\EntityRepository;

/**
 * SupplierRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class SupplierRepository extends EntityRepository {

    public function findAllByIsDeleted($isDeleted) {
        $qb = $this->createQueryBuilder('s');
        $qb
                ->where('s.isDeleted = :isDeleted')
                ->setParameter('isDeleted', $isDeleted);
        return $qb;
    }

}

仍然,我收到以下错误:

  

无法加载类型“VP \ SupplierBundle \ Entity \ Supplier”

知道它可能来自哪里?试图查看official symfony doc和一些论坛主题但到目前为止没有运气......

非常感谢你的帮助!

@Jeet提供的工作解决方案

//  
use Symfony\Bridge\Doctrine\Form\Type\EntityType as DoctrineEntityType;
//

public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
                ->add('name')
                ->add('supplier', DoctrineEntityType::class, array(
                    'class' => 'VPSupplierBundle:Supplier',
                    'query_builder' => function (EntityRepository $er) {
                        return $er->findAllByIsDeleted(0);
                    },
                    'choice_label' => 'name'
                ))
                ->add('submitnew', SubmitType::class, array(
                    'label' => 'Add Entity',
                    'attr' => array(
                        'class' => 'btn btn-primary',
        )));
    }

谢谢!

1 个答案:

答案 0 :(得分:0)

你这样做错了:

->add('supplier', Supplier::class, array(
    'class' => 'VPSupplierBundle:Supplier',
    'property' => 'name',
    'query_builder' => function (\Doctrine\ORM\EntityRepository $er) {
        return $er->findAllByIsDeleted(0);
    },
    'choice_label' => 'name'
))

您正在加载表单类型未知的Supplier::class。我想你应该加载一个EntityType::class表单类型。

点击document。您希望显示与实体关联的选项字段,因此您需要EntityType::class。要识别实体类型,您已经通过class选项提供了您的实体身份。所以它很清楚。

希望它有所帮助!