我正在尝试在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',
)));
}
谢谢!
答案 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
选项提供了您的实体身份。所以它很清楚。
希望它有所帮助!