【问题标题】:Entity forms problems with Symfony2 relation many to manySymfony2关系多对多的实体形式问题
【发布时间】:2011-10-27 13:34:42
【问题描述】:

我实际上正在学习 Symfony2,但我遇到了一个问题。我在电影和演员之间有着多对多的关系。

我创建了一个表单来创建一个新电影。在这个表格中,我有一个选择的输入来选择演员,但是当我选择许多演员时,表格生成了一个错误“这个值不应该是空白的”。当我在演员类中删除我的断言时,我没有这个错误。 为什么我的表单会检查我的 actor 类中的断言?

    /*
       *  MOVIE CLASS
       *
       */    
    class Movie
        {
            //...


            /**
             * @ORM\ManyToMany(targetEntity="Actor", inversedBy="movies")
             * @ORM\JoinTable(name="movie_actor")
             */
            protected $actors;
        }

       /*
       *  ACTOR CLASS
       *
       */

        class Actor
        {

            /**
             * @ORM\Column(type="string", length="255")
             * @Assert\NotBlank()
             * @Assert\MinLength(3)
             */
            protected $firstName;

            /**
             * @ORM\Column(type="string", length="255")
             * @Assert\NotBlank()
             * @Assert\MinLength(3)
             */
            protected $lastName;

            /**
             * @ORM\Column(type="date", nullable = true)
             */
            protected $birthday;

            /**
             * @ORM\Column(type="boolean")
             * @Assert\NotBlank()
             */
            protected $sexe;


            /**
             * @ORM\ManyToMany(targetEntity="Movie", mappedBy="actors")
             * @Assert\NotNull()
             */
            protected $movies;
        }


/**
*
* MOVIE FORM 
*/
class MovieType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('title')
            ->add('description')
            ->add('category')
            ->add('actors', 'entity',  
            array(
                'class' => 'MyAppFilmothequeBundle:Actor',
                'query_builder' => function(EntityRepository $er)
                    {
                        return $er->createQueryBuilder('a')->orderBy('a.firstName', 'ASC');
                    },
                 'multiple' => true
            ))
            ->add('user')
        ;
    }

    public function getDefaultOptions(array $options)
    {
        return array(
        'data_class' => 'MyApp\FilmothequeBundle\Entity\Movie');
    }
    public function getName()
    {
        return 'movie';
    }
}

【问题讨论】:

    标签: forms many-to-many entity symfony


    【解决方案1】:

    验证是通过向一个类添加一组规则(称为约束)来完成的。因此,您的表单会查看您在相关类中放置的断言,以检查提交的数据是否有效。查看Forms 章节。

    还有一件事:作为"required" option 的实体字段默认设置为“true”。如果你真的想要,只需将其设置为 false。

    【讨论】:

    • 正如官方文档中所说,required 仅用于通过 HTML5 属性 required 进行客户端验证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多