मैं वर्तमान में सिम्फनी 2 फॉर्म घटक का उपयोग करने की कोशिश कर रहा हूं हालांकि सिलेक्स माइक्रोफ्रेमवर्क।सिम्फनी 2 फॉर्म घटक - नाम विशेषता में फॉर्म नाम के बिना फ़ील्ड बनाना
मेरा प्रवेश फार्म के रूप में उत्पन्न होता है इस प्रकार है:
$app = $this->app;
$constraint = new Assert\Collection(array(
'username' => new Assert\NotBlank(),
'password' => new Assert\NotBlank(),
));
$builder = $app['form.factory']->createBuilder('form', $data, array('validation_constraint' => $constraint));
$form = $builder
->add('username', 'text', array('label' => 'Username'))
->add('password', 'password', array('label' => 'Password'))
->getForm()
;
return $form;
मुद्दा यह है कि जिसके परिणामस्वरूप प्रपत्र इस प्रकार बनाया जा रहा है है:
<fieldset>
<input type="hidden" value="******" name="form[_token]" id="form__token">
<section class="">
<label class=" required" for="form_username">Username</label>
<div><input type="text" value="" name="form[username]" id="form_username" class="text"></div>
</section>
<section class="">
<label class=" required" for="form_password">Password</label>
<div><input type="password" value="" name="form[password]" id="form_password" class="password"></div>
</section>
<section>
<div><button class="fr submit">Login</button></div>
</section>
</fieldset>
जबकि मैं नाम चाहते हैं और आईडी के रूप में होने के लिए जिम्मेदार बताते हैं निम्नानुसार:
<div><input type="text" value="" name="username" id="username" class="text"></div>
...
<div><input type="password" value="" name="password" id="password" class="password"></div>
मैंने वेब को खराब कर दिया है और 'property_path' opti पर सलाह खोज ली है परन्तु मेरा मानना है कि यह वास्तविक सिम्फनी 2 ढांचे में उपयोग किए जाने पर डेटा को संसाधित करने के लिए उपयोग की जाने वाली कक्षा के साथ करना है।
मैं फार्म घटक फ़ाइलें और बिंदु जो के रूप में सेट किया जा रहा है में है के माध्यम से किया गया है:
Symfony/घटक/प्रपत्र/एक्सटेंशन/कोर/प्रकार/FieldType.php - लाइन 71
public function buildView(FormView $view, FormInterface $form)
{
$name = $form->getName();
if ($view->hasParent()) {
$parentId = $view->getParent()->get('id');
$parentFullName = $view->getParent()->get('full_name');
$id = sprintf('%s_%s', $parentId, $name);
$fullName = sprintf('%s[%s]', $parentFullName, $name);
} else {
$id = $name;
$fullName = $name;
}
...
अनजाने में फॉर्मफैक्टरी फॉर्मबिल्डर का उपयोग करता है जो तब फॉर्म क्लास के साथ काम करता है और मेरे पास घटक की संपूर्ण आंतरिक कार्यप्रणाली का विश्लेषण करने के लिए पर्याप्त समय नहीं है।
मुझे पता है कि फ़ील्ड को बिल्डबिल्डर के भीतर 'बच्चों' सरणी में विकल्पों की एक समान सूची के साथ जोड़ा जाता है। जब GetForm फ़ंक्शन को कॉल किया जाता है, तो एक नया फॉर्म तत्काल होता है और प्रत्येक बच्चे फ़ील्ड टाइप को ऐड() विधि का उपयोग करके फ़ॉर्म में दर्ज किया जाता है। यह फार्म> जोड़ने() विधि स्वचालित रूप से प्रत्येक बच्चे के माता पिता के रूप पर्चा सेट:
public function add(FormInterface $child)
{
$this->children[$child->getName()] = $child;
$child->setParent($this);
if ($this->dataMapper) {
$this->dataMapper->mapDataToForm($this->getClientData(), $child);
}
return $this;
}
बस केवल फ़ील्ड नाम प्रदर्शित का सबसे अच्छा तरीका के इस करता है किसी और पता है कि दूर करने के लिए इन कक्षाओं ओवरराइड करने के लिए शुरू करने के बिना ?
form_div_layout.html.twig widget_attributes ब्लॉक में 'full_name' के बजाय 'नाम' खींचना संभव है, लेकिन मुझे यकीन नहीं था कि यह आदर्श था (जैसे आईडी अपरिवर्तित बनी हुई है) या यदि वहां था एक और तरीका या इंजेक्शन योग्य विकल्प जो चाल करेगा।
अहह, अब मैं जिथूब पर क्यों नहीं देखा, जो समझ में आया होगा। धन्यवाद :) – thingygeoff
@thingygeoff ताकि आप इस उत्तर को स्वीकार कर सकें :) – j0k
आह हे! आपने अपना उत्तर अपडेट किया है - एक आदर्श समाधान! धन्यवाद – thingygeoff