【发布时间】:2016-10-18 13:27:31
【问题描述】:
我正在尝试在 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',
)));
}
谢谢!
【问题讨论】:
-
您的
__toString()是否已定义在您的Supplier类中? -
刚刚在 Supplier 类中创建它,但没有变化:
public function __toString() { return $this->getName(); }