Symfony2 LexikFormFilterBundle:filter_entity的空值导致表单错误

时间:2015-04-17 09:43:27

标签: php symfony

我正在使用Symfony 2.7.0-BETA1的LexikFormFilterBundle(当前开发版)。它按预期工作,但......

问题

当提交空选项时(即没有选择实体),

所有filter_entity个字段都会抛出表单错误。记录in the basic example,必须设置

  

' validation_groups' =>数组('过滤')//避免与NotBlank()约束相关的消息

但就我而言,ManyToOne实体不使用NotBlank() - 断言。尽管如此,表单会抛出关于不存在的实体''的错误。当我选择一个实体时,过滤器会正确过滤,不会显示任何错误消息。其他过滤字段类型在空白时也不会抛出错误。

以下是我的代码的精简表示:

实体代码:

<?php
// src/AppBundle/Entity/Serviceevent.php
namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Serviceevent
 *
 * @ORM\Table(name="serviceevents")
 * @ORM\Entity(repositoryClass="AppBundle\Entity\ServiceeventRepository")
 */
class Serviceevent
{
    /**
     * @var \AppBundle\Entity\Park
     *
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Park", inversedBy="serviceevents")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="park_id", referencedColumnName="id", nullable=false)
     * })
     */
    private $park;
}

表单过滤器代码:

<?php
// /src/AppBundle/Filter/ServiceeventFilterType.php
namespace AppBundle\Filter;

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

class ServiceeventFilterType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('park', 'filter_entity', array(
                'class' => 'AppBundle:Park',
                'property' => 'identifyingName',
                'label' => 'Park',
                'placeholder' => '',
                'required' => false,
            ));
        ;
    }

    public function getName()
    {
        return 'serviceevent_filter';
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'csrf_protection'   => false,
            'validation_groups' => array('filtering'), // avoid NotBlank() constraint-related message
        ));
    }
}

我的期望

我希望,如果没有选择任何值,则不会在没有抛出错误的情况下对该字段进行过滤。

我得到了什么

相反,我得到了像这样的所有实体字段的表单错误:

  

的Symfony \元器件\验证\ ConstraintViolation   对象(Symfony \ Component \ Form \ Form).children [park] =

     

引起:

     

的Symfony \元器件\表格\异常\ TransformationFailedException   无法反转属性路径的值&#34; [park]&#34;:选择&#34;&#34;不存在或不是唯一的

     

引起:

     

的Symfony \元器件\表格\异常\ TransformationFailedException   选择&#34;&#34;不存在或不是唯一的

问题是

问题是:如何摆脱这些错误?

1 个答案:

答案 0 :(得分:0)

用户wcluijt在https://github.com/symfony/symfony/issues/14393#issuecomment-94996862修复了此问题。这证实,我的问题是由Symfony 2.7.0-BETA1中的​​Bug引起的。所以我可以将这个问题视为固定的。很抱歉浪费你的时间来处理与测试相关的错误。