मैं समझता हूँ के रूप में, आप अंतिम टेम्पलेट में केवल form_widget (फार्म) उपयोग करना चाहते हैं।
Let मान हम दो विरासत में मिला मॉडल (ModelA, ModelB) और फार्म प्रकार उनके लिए (ModelAType, ModelBType)
class ModelA {
private $A;
private $B;
// Getters and setters
}
class ModelB extends ModelA {
private $C;
// Getters and setters
}
/**
* @DI\Service(id = "form.type.modelA")
* @DI\Tag("form.type", attributes={ "alias":"model_a_type" })
*/
class FormAType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('A')
->add('B')
;
}
// getName and so on
}
/**
* @DI\Service(id = "form.type.modelA")
* @DI\Tag("form.type", attributes={ "alias":"model_b_type" })
*/
class FormAType extends AbstractType {
public function getParent() {
return "model_a_type";
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('C')
;
}
// getName and so on
}
आप formB प्रस्तुत करना हैं, तो आप ए, बी, सी आदेश मिल जाएगा है, लेकिन आप ए, सी, बी चाहते हैं। इसे पूरा करने के लिए, फॉर्म टेम्पलेट बनाएं और ऐप में संदर्भ जोड़ें। कॉन्फ़िगरेशन फ़ाइल:
#app/config/config.yml
twig:
....
form:
resources:
- YourAppBundle:Form:fields.html.twig
{# src/YourAppBundle/Resources/views/Form/fields.html.twig #}
{% block model_a_type_widget %}
{{ form_widget(form.A) }}
{{ form_widget(form.B) }}
{% endblock model_a_type_widget %}
{% block model_b_type_widget %}
{{ form_widget(form.A) }}
{{ form_widget(form.C) }}
{{ block('model_a_type_widget') }}
{% endblock model_b_type_widget %}
अब, जब आप फॉर्म बी प्रस्तुत करते हैं, तो आपको वांछित क्रम दिखाई देगा और कोड संरचित रखा जाएगा। ऐसा इसलिए होता है क्योंकि प्रत्येक विजेट केवल एक बार प्रस्तुत किया जाता है, इसलिए यदि आप पैरेंट ब्लॉक को कॉल करने से पहले इसे प्रस्तुत करते हैं, तो आप उनका ऑर्डर बदल देंगे।
धन्यवाद, लेकिन यह संभव नहीं है। हमारे पास एक बहुत जटिल संरचना है और form_widget (फॉर्म) फ़ंक्शन की आवश्यकता है, इसलिए हमें बैकएंड में ऐसा करना होगा! – snirgel
क्या आपने वांछित क्रम में 'फॉर्मबिल्डर' उदाहरण में फ़ील्ड जोड़ने का प्रयास किया है? –
Thats संभव नहीं है। हमारे पास निर्भरता, विरासत आदि के साथ लगभग 80 ऑब्जेक्ट-प्रकार हैं, इसलिए हम हाथ से ऐसी चीजों का उपयोग नहीं कर सकते हैं .... – snirgel