【问题标题】:Custom select in a form type in Symfony3Symfony3中表单类型的自定义选择
【发布时间】:2017-05-05 09:55:19
【问题描述】:

我正在创建一个获取实体数据的选择,称为类别。

我想开发的选择,基本上和我开发和工作的一样,但是我从类别实体中获取的值。

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

【问题讨论】:

    标签: php symfony frameworks


    【解决方案1】:

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

    ->add('categoria', 'Symfony\Bridge\Doctrine\Form\Type\EntityType', array(
                'class' => 'BackendBundle\Entity\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;
        }
    }
    

    【讨论】:

    • 该类在 src\BackendBundle\Entity\Categoria.php 中,它有`use Doctrine\ORM\EntityRepository;使用 BackendBundle\Entity\Categoria;使用 BackendBundle\Entity\CategoriaRepository;公共函数 __toString() { return $this->getName(); } }` 我在表单中输入了这个` ->add('categoria', EntityType::class, array('class' => Categoria::class) ) ` 错误是一样的“无法加载类型”EntityType ::Categoria"" 任何想法@Rafael-santos?提前致谢
    • 再次查看上述回复,更新了更多细节并使用完整的类名以避免混淆。
    【解决方案2】:

    'entity' 应该是 EntityType::class, 您应该使用 EntityType 的类名,而不仅仅是“实体”字符串

    见: https://github.com/symfony/symfony/blob/master/UPGRADE-3.0.md#form

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 2013-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多