Symfony2: วิธีเปลี่ยนค่าฟิลด์ที่ซ่อนอยู่ใน PRE_SUBMIT

นี่คือวิธีการเพิ่มค่าที่ซ่อนอยู่ใน $formBuilder :

->add('depth', 'hidden', array('mapped'=>false, 'data' => 1))

ฉันมีฟังก์ชันที่เริ่มทำงาน ON_PRE_SUBMIT ที่บรรทัดด้านล่าง ฉันคิดว่าค่าของฟิลด์นี้จะเปลี่ยนไป แต่นั่นไม่ใช่กรณีนี้

$form->get('depth')->setData($depth++); //$depth = $form->get('depth')->getData();

ฉันได้ลองทำตามที่แสดงแล้ว ที่นี่ :

$data = $event->getData();
$data['depth'] = $depth++;
$form->setData($data);

แต่ไม่มีอะไรเปลี่ยนแปลง ฉันได้ลองใช้โค้ดข้างต้นในฟิลด์อื่นแล้ว และพวกเขาก็เปลี่ยนค่าของฟิลด์ตามปกติ ฉันพลาดอะไรไปรึเปล่า?


person stevenll    schedule 01.07.2014    source แหล่งที่มา


คำตอบ (2)


ตั้งค่าข้อมูลในเหตุการณ์ $:

$data = $event->getData();
$data['depth'] = $depth + 1;
$event->setData($data);
person Nikola K.    schedule 22.01.2016

สิ่งหนึ่งที่ฉันสังเกตเห็นคือคุณกำลังใช้ $depth++ ซึ่งจะกำหนดค่าก่อนแล้วจึงเพิ่มค่า ดังนั้นคุณจึงจะต้องกำหนดค่าเก่าในที่สุด ลองเปลี่ยนสิ่งนี้:

$form->get('depth')->setData(++$depth);

คุณช่วยลองเปลี่ยนกิจกรรมเป็น POST_SUBMIT ได้ไหม ฉันเชื่อว่าถ้าคุณใช้ PRE_SUBMIT ข้อมูลที่ส่งมาจะแทนที่ข้อมูลใดๆ ที่คุณแก้ไขใน PRE_SUBMIT

person trrrrrrm    schedule 01.07.2014
comment
โปรดอธิบายว่าทำไมสิ่งนี้จึงแก้ไขปัญหาได้ - person Nathaniel Ford; 02.07.2014
comment
แม้ว่าฉันจะสงสัยอย่างมากเกี่ยวกับทฤษฎีก่อนการเพิ่มและหลังการเพิ่มที่นี่ แต่ฉันได้ลองสิ่งนี้และสามารถยืนยันได้ว่าค่า 'ความลึก' ยังคงเหมือนเดิม - person stevenll; 02.07.2014
comment
ฉันอัปเดตคำตอบแล้ว ตรวจสอบว่าคำแนะนำอื่น ๆ ของฉันช่วยแก้ปัญหาของคุณได้หรือไม่ - person trrrrrrm; 02.07.2014
comment
คุณไม่สามารถเปลี่ยนแปลงข้อมูลของแบบฟอร์มที่ส่งได้ ข้อผิดพลาดเซิร์ฟเวอร์ภายใน 500 - แล้วส่งข้อยกเว้น - person stevenll; 02.07.2014
comment
ทางเลือกที่ดีที่สุดของคุณคือการใช้ตัวแปลงข้อมูลที่อธิบายไว้ที่นี่ symfony.com/doc/master /ตำราอาหาร/form/data_transformers.html - person trrrrrrm; 03.07.2014