1

2.1.7 で Symfony フォームの検証に問題があります。

データをフォームにバインドすると、「この値は空白にしないでください」というエラーが表示されます - どこが間違っているのかわかりませんか? 有効でない場合、データがフォームにバインドされていないように見えますが、予想されるエラーが表示される代わりに、空白と見なされます。

つまり、開始フィールドの場合、「これは日付である必要があります」という文字列を送信します。エラーは NotBlank で発生しますが、日付ではない場合は発生するはずです。

フォーム バインド プロセスを進めると、次のことに気付きました。

Form/Form.phpの行にヒットすると、日付 (文字列 - "2013-01-01") の submitData が空の配列として設定されます - ループにヒットするとすぐに、配列キーは明らかに設定されません。問題はに由来するようです。

フィールドをintに設定してから文字列を送信すると、viewToNormメソッドはエラーをスローし、セットをキャッチするsynchronized = falseとmodelDataとnormDataがバインドされません。

実在物:

namespace HvH\DealsBundle\Entity;

class Deal
{
    private $name;
    private $start;

    // getters and setters here...
}

検証:

# src/HvH/DealsBundle/Resources/config/validation.yml
HvH\DealsBundle\Entity\Deal:
    properties:
        name:
            - NotBlank: ~
            - Type:
                type: string
        start:
            - NotBlank: ~
            - Date: ~

フォームタイプ:

<?php

namespace HvH\DealsBundle\Form;

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


class DealType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', null, array('description' => 'name'))
            ->add('start', null, array('description' => 'start'))
        ;
    }


    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'HvH\DealsBundle\Entity\Deal',
            'csrf_protection' => false,
            'cascade_validation' => false // have also tried this with true
        ));
    }

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


}
4

0 に答える 0