การตรวจสอบความถูกต้องของแบบฟอร์ม symfony2: form.errors VS form.fieldname.errors

ฉันมีปัญหาเกี่ยวกับข้อผิดพลาดที่ปรากฏ

ด้านล่างเป็นส่วนหนึ่งของเครื่องมือสร้างแบบฟอร์มของฉัน

->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')),
    )
)

การตรวจสอบความถูกต้องใช้งานได้ แต่ปัญหาคือสำหรับฟิลด์ "รุ่น" แรก ข้อผิดพลาด "แนบ" กับฟิลด์นั้นเอง เช่น

{{ form_errors(form.editions) }}

และสำหรับฟิลด์ที่สองมีข้อผิดพลาดแนบมากับแบบฟอร์มแต่ไม่ได้อยู่ที่ฟิลด์

{{ form_errors(form) }}

แล้วจะกำหนดข้อผิดพลาดให้กับฟิลด์ไม่ใช่แบบฟอร์มได้อย่างไร


person user1112057    schedule 19.06.2013    source แหล่งที่มา


คำตอบ (3)


ลองเพิ่มตัวเลือก 'error_bubbling' => false ใน releaseDates

person Michael Sivolobov    schedule 19.06.2013

คุณสามารถสร้างเครื่องมือตรวจสอบความถูกต้องของคุณเองซึ่งขยายมาจากคลาสการนับ จากนั้นคุณใช้ฟังก์ชันต่อไปนี้ในฟังก์ชันตรวจสอบของคุณ (แทน addViolation)

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

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

คุณสามารถทำให้ชื่อฟิลด์เป็นพารามิเตอร์เพื่อนำมาใช้ซ้ำได้:

'constraints' => new Count(array('fieldname' => $fieldname, 'min' => 1, 'minMessage' => 'Choose at least one edition'))
person Flow    schedule 20.06.2013
comment
อย่างที่ฉันบอกไปแล้วว่าการตรวจสอบความถูกต้องนั้นใช้งานได้ มันแค่ตั้งค่าข้อความแสดงข้อผิดพลาดในแบบฟอร์ม แต่ต้องตั้งค่าฟิลด์ การตั้งค่า 'error_bubbling' =› ความช่วยเหลือที่ผิดพลาด ขอบคุณ Michael Sivolobov - person user1112057; 20.06.2013

คุณลอง:

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