2017-05-05 75 views
0

我正在创建一个选择,它将一个实体的数据称为category。在Symfony3中的表单类型中自定义选择

我想要开发的选择基本上与我开发和工作的选择相同,但具有从类别实体获取的值。

namespace AppBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 

use Symfony\Component\Form\Extension\Core\Type\TextType; 
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; 
use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
use BackendBundle\Entity\Categoria; 
use BackendBundle\Entity\CategoriaRepository; 

class ProductoType extends AbstractType 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
       ->add('nombre', TextType::class, array(
        'label' => 'Nombre', 
        'required' => 'required', 
        'attr' => array(
         'class' => 'form-name form-control' 
        ) 
       )) 
       ->add('categoria', ChoiceType::class, array(
        'choices' => array(
        'General' => '1', 
        'Coffe' => '2' 
        ), 
        'required' => false, 
        'empty_data' => null 
       )) 
       ->add('Save', SubmitType::class, array(
        "attr" =>array(
         "class" => "form-submit btn btn-success" 
        ) 
       )) 
       ; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'BackendBundle\Entity\Producto' 
     )); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function getBlockPrefix() 
    { 
     return 'backendbundle_producto'; 
    } 
} 

我想补充类似下面的部分,但我得到的错误未能加载类型“实体”

  ->add('categoria', 'entity', array(
        'class' => 'BackendBundle:Categoria' 
       ) 
      ) 

原来BBDD在Object of class \BackendBundle\Entity\Categoria could not be converted to string

回答

1

首先,如果你正在使用的symfony 3,必须使用Symfony\Bridge\Doctrine\Form\Type\EntityType和类应该是类名而不是实体名称

->add('categoria', 'Symfony\Bridge\Doctrine\Form\Type\EntityType', array(
      'class' => 'BackendBundle\Entity\Categoria' 
    ) 
) 

和categoria应该像:

namespace BackendBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table() 
* @ORM\Entity() 
*/ 
class Categoria 
{ 
    /** 
    * @var int 
    * 
    * @ORM\Id 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    protected $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string") 
    */ 
    protected $name; 

    public function __toString() 
    { 
     return $this->name; 
    } 
} 
+0

这个类是在src \ BackendBundle \ Entity \ Categoria.php ,它有 ' 使用Doctrine \ ORM \ EntityRepository; 使用BackendBundle \ Entity \ Categoria; 使用BackendBundle \ Entity \ CategoriaRepository; public function __toString() { return $ this-> getName(); } }' 我把在形成本 ' - >加( 'categoria',的EntityType ::类,阵列( '类'=> Categoria ::类 ) ) ' 和误差是相同的“无法加载类型”EntityType :: Categoria“” 任何想法@拉斐尔桑托斯?在此先感谢 – Manply

+0

再次审查上述响应,更新了更多的细节,并使用整个类名避免混淆。 – rafrsr

相关问题