में चेकबॉक्स चेक किया गया है, तो फॉर्म प्रकार के लिए सत्यापन बंद करें, मैं भुगतान और शिपिंग पते के साथ एक पता फ़ॉर्म बनाने की कोशिश कर रहा हूं। जब शिपिंग पते पर एक चेकबॉक्स चेक किया जाता है, तो मैं उस पते पर होने से फॉर्म सत्यापन को छोड़ना चाहता हूं।सिम्फनी
मैंने नीचे दिए गए फॉर्म प्रकार को टॉगल विकल्प के साथ बनाया है जो चेकबॉक्स को प्रदर्शित और सौदा करेगा, हालांकि फॉर्म चेक किए जाने पर भी मान्य है।
सिम्फनी में documentation on how to implement such a form है, और भले ही मेरे पास लगभग एक ही कोड है, सत्यापन के दौरान सत्यापन बंद नहीं किया गया है। मैं सत्यापन समूहों का उपयोग नहीं कर रहा हूं, इसलिए मैं इकाई पर सत्यापन अक्षम करने के लिए डिफ़ॉल्ट समूह को अक्षम करता हूं।
AddressType
Address
वर्ग के लिए एक फार्म (जो NotBlank
और Callback
जैसे कुछ क्षेत्रों पर एनोटेशन की कमी है) का निर्माण।
$addressForm = $this
->createFormBuilder([
"paymentAddress" => $paymentAddress,
"shippingAddress" => $shippingAddress
])
->add("paymentAddress", AddressType::class, [
"label" => false
])
->add("shippingAddress", AddressType::class, [
"label" => false,
"toggle" => "Use payment address"
])
->add("submit", SubmitType::class, [
])
->getForm();
मैं अब कुछ घंटों के लिए इस पर चल रहा है, लेकिन मैं क्यों सत्यापन बंद नहीं किया जा रहा है अनुमान करने में सक्षम नहीं हूँ, और मैं:
class AddressType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
if ($options["toggle"]) {
$builder->add("toggle", CheckboxType::class, [
"mapped" => false,
"required" => false,
"label" => $options["toggle"]
]);
}
$builder
->add("name", TextType::class, [
"required" => !$options["toggle"]
])
->add("address", TextType::class, [
"required" => !$options["toggle"]
])
->add("zipcode", TextType::class, [
"label" => "Postcode",
"required" => !$options["toggle"]
])
->add("city", TextType::class, [
"required" => !$options["toggle"]
])
->add("countryCode", ChoiceType::class, [
"choices" => Address::COUNTRY_CODES
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
"toggle" => false,
"data_class" => Address::class,
"validation_groups" => function(FormInterface $form) {
if ($form->has("toggle") && $form->get("toggle")->getData() === true) {
return [];
}
return ["Default"];
}
]);
$resolver->setAllowedTypes("toggle", ["bool", "string"]);
}
}
मैं इस तरह प्रकार का उपयोग करें मैं इस छोटे से विस्तार पर एक फार्म बनाने के लिए तैयार नहीं हूँ।
AddressType
के लिए सत्यापन क्यों कॉन्फ़िगरेशन में बंद होने से बंद नहीं है? यदि यह सिर्फ यह नहीं है कि यह कैसे काम करता है, तो आंशिक रूप से एक साफ तरीके से सत्यापन को बंद करने के लिए एक बेहतर समाधान क्या होगा?
संपादित करें: भले ही "validation_groups" => false
को डिफॉल्ट में, बिल्डर में बनाए गए बच्चों में या फ़ॉर्म के उपयोग में सेट करने के बावजूद सत्यापन अभी भी होगा। इसे बंद करने के साथ नहीं करना है। सिम्फनी के अपने संसाधन सहित प्रत्येक ऑनलाइन संसाधन में कहा गया है कि इसे काम करना चाहिए ...
आपके विस्तृत उत्तर के लिए धन्यवाद। मैंने पहले से ही सभी बाधाओं में समूहों को जोड़ने की कोशिश की थी और डिफ़ॉल्ट रूप से उन समूहों को validation_groups बंद करने से वापस कर दिया था। मेरे लिए क्या लापता था वैध बाधा थी। यह मेरे लिए नहीं हुआ था कि जोड़े गए क्षेत्र पता टाइप के बच्चे बन जाएंगे और इस प्रकार बाधा की आवश्यकता होगी। – Villermen