मेरे पास एक कस्टम फॉर्मटाइप है, जिसे पैरेंट फॉर्म जारी रखने पर खुद को मूल इकाई में जोड़ना होगा।Symfony2 (> = 2.3): बच्चे से पैरेंट फॉर्म इवेंट कैसे सुनें?
Symfony < 2.3 में यह निम्न कार्य करके किया जा सकता है:
class FooType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
...
$builder->getParent()->addEventSubscriber(new FooSubscriber)
}
}
class FooSubscriber implements EventSubscriberInterface
{
static function getSubscribedEvents()
{
return array(
FormEvents::POST_SUBMIT => 'postSubmit'
);
}
}
लेकिन Symfony 2.6 के उन्नयन मुझे पता चला है कि $builder->getParent()
हटा दिया गया है के बाद। लेकिन अब मैं अभिभावक को जमा नहीं कर सकता।
इसलिए मैंने अपने निर्माता को श्रोता जोड़ा और सब्सक्राइबर के भीतर से माता-पिता का संदर्भ दिया। लेकिन यह वास्तव में काम नहीं करता है, के बाद से मैं माता पिता के फार्म पर एक जांच मान्य किया जा रहा है - जो यह नहीं है, क्योंकि यह अभी तक प्रस्तुत नहीं कर रहा है:
function postSubmit(FormEvent $e)
{
if ($e->getForm()->getParent()->getRoot()->isValid()) {
//this gives 'false'
यह झूठी कोड के अगले टुकड़े के कारण होता है:
// Symfony\Component\Form\Form.php @ line 744
public function isValid()
{
if (!$this->submitted) {
return false;
}
और क्योंकि माता पिता प्रपत्र पहले सभी बच्चों के माध्यम से लूप और प्रस्तुत कि, खुद पर $this->submitted = true
सेट करने से पहले ... मुझे यकीन है कि अगर माता-पिता मान्य है नहीं कर रहा हूँ।
टी एल; डॉ
मैं अपने माता पिता के फार्म के लिए एक Eventlistener जोड़ सकते हैं, मेरे माता-पिता फार्म समायोजित करने के लिए बिना? मैं चाहता हूं कि मेरा फूटाइप कुछ ऐसा हो जो मैं सभी रूपों में जोड़ सकूं, बिना फूटाइप विशिष्ट के लिए कुछ तर्क जानने/याद रखना।
जैसा कि आप कहते हैं, 2.3 में getParent को हटा दिया गया था। क्या आप उपयोग के मामले का अधिक विस्तार से वर्णन कर सकते हैं? एक बेहतर समाधान हो सकता है। – Cerad
यह एक इकाई है जिसे किसी अन्य इकाई में जोड़ा जा सकता है। इस मामले में यह एक मेनूइटम है जो पृष्ठ बनाए जाने पर बनाया जाता है। यह मेनूइटम पृष्ठ के शीर्षक पर आधारित है, इसलिए इसके लिए इनपुट के लिए इसके माता-पिता की आवश्यकता है। लेकिन मैं नहीं चाहता कि पेज 'जान' जाए, वहां मेनूइटम है जो उसके ऊपर निर्भर करता है। तो इससे पहले, मैं पेज एडमिन में एक मेनूइटम जोड़ सकता था और वह था। अब मैं व्यवस्थापक में एक ग्राहक जोड़ना चाहता हूं - जो ** गंदा ** – Oskar
एक ही समस्या है, मैं जानना चाहता हूं कि रूट फॉर्म मान्य है, मुझे 2 में ऐसा करने का कोई तरीका नहीं मिल रहा है।6 :( – Tiois