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';
}
}