validasi formulir symfony2: form.errors VS form.fieldname.errors

saya punya masalah dengan bagaimana kesalahan itu muncul.

di bawah ini adalah bagian dari pembuat formulir saya

->add('editions', 'entity', array(
    'multiple' => true, 
    'expanded' => true, 
    'class' => 'MyBundle:Edition', 
    'property' => 'name',
    'constraints' => new Count(array('min' => 1, 'minMessage' => 'Choose at least one edition')),
    )
)
->add('releaseDates', 'collection', array(
    'type' => new ReleaseDateFormType(),
    'allow_add'    => true,
    'allow_delete' => true,
    'by_reference' => false,
    'constraints' => new Count(array('min' => 1, 'minMessage' => 'Choose at least one release date')),
    )
)

Validasi berfungsi, tetapi masalahnya adalah, untuk "edisi" bidang pertama, kesalahannya "melekat" pada bidang itu sendiri, yaitu.

{{ form_errors(form.editions) }}

dan untuk field kedua error dilampirkan pada form, namun tidak pada field

{{ form_errors(form) }}

jadi bagaimana mungkin menetapkan kesalahan ke suatu bidang dan bukan ke formulir?


person user1112057    schedule 19.06.2013    source sumber


Jawaban (3)


Coba tambahkan opsi 'error_bubbling' => false ke Tanggal rilis

person Michael Sivolobov    schedule 19.06.2013

Anda dapat membuat validator Anda sendiri yang diturunkan dari kelas count. Kemudian Anda menggunakan fungsi berikut dalam fungsi validasi Anda (bukan addViolation)

$context->addViolationAt('fieldname', 'message', array(), null);

In Symfony 2.1:
$context->addViolationAtSubPath('fieldname', 'message', array(), null);

Anda dapat menjadikan nama bidang sebagai parameter untuk digunakan kembali:

'constraints' => new Count(array('fieldname' => $fieldname, 'min' => 1, 'minMessage' => 'Choose at least one edition'))
person Flow    schedule 20.06.2013
comment
seperti yang saya katakan, validasi berfungsi, hanya mengatur pesan kesalahan pada formulir, tetapi untuk bidang, pengaturan 'error_bubbling' =› false membantu, terima kasih kepada Michael Sivolobov - person user1112057; 20.06.2013

Apakah Anda mencoba:

{{ form_errors(form.releaseDates) }}
person Zeljko    schedule 19.06.2013