2012-01-02 23 views
6

मैं अपने पंजीकरण फॉर्म में EWZRecaptcha जोड़ने की कोशिश कर रहा हूं। मेरे पंजीकरण फार्म बिल्डर इस तरह दिखता है:Symfony2 पंजीकरण फॉर्म में रीकैप्चा फ़ील्ड जोड़ें

public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder->add('username', 'text') 
      ->add('password') 
      ->add('recaptcha', 'ewz_recaptcha', array('property_path' => false)); 
} 

public function getDefaultOptions(array $options) 
{ 
    return array(
      'data_class' => 'Acme\MyBundle\Entity\User', 
    ); 
} 

अब, मैं कैसे कैप्चा क्षेत्र के लिए रीकैप्चा बाधा जोड़ सकते हैं? मैं validation.yml को यह जोड़ने की कोशिश की:

namespaces: 
    RecaptchaBundle: EWZ\Bundle\RecaptchaBundle\Validator\Constraints\ 

Acme\MyBundle\Entity\User: 
    ... 
    recaptcha: 
    - "RecaptchaBundle:True": ~ 

लेकिन मैं Property recaptcha does not exists in class Acme\MyBundle\Entity\User त्रुटि मिलती है।

Neither property "recaptcha" nor method "getRecaptcha()" nor method "isRecaptcha()" 
exists in class "Acme\MyBundle\Entity\User" 

किसी भी विचार है कि यह कैसे हल करने के लिए:

अगर मैं recaptcha क्षेत्र के विकल्पों में से array('property_path' => false) निकालने के लिए, मैं त्रुटि मिलती है? :)

उत्तर

4

Acme\MyBundle\Entity\User में recaptcha संपत्ति नहीं है, इसलिए आपको User इकाई पर उस संपत्ति को सत्यापित करने का प्रयास करने के लिए त्रुटियां प्राप्त हो रही हैं। 'property_path' => false सेट करना सही है, क्योंकि यह Form ऑब्जेक्ट को बताता है कि इसे डोमेन ऑब्जेक्ट के लिए इस प्रॉपर्टी को प्राप्त/सेट करने का प्रयास नहीं करना चाहिए।

तो आप इस फ़ॉर्म पर उस फ़ील्ड को कैसे सत्यापित कर सकते हैं और अभी भी अपनी User इकाई को जारी रख सकते हैं? सरल - यह में भी समझाया गया है। आपको खुद को बाधा स्थापित करने और FormBuilder पर पास करने की आवश्यकता होगी। यहाँ तुम क्या अंत चाहिए:

<?php 

use Symfony\Component\Validator\Constraints\Collection; 
use EWZ\Bundle\RecaptchaBundle\Validator\Constraints\True as Recaptcha; 

... 

    public function getDefaultOptions(array $options) 
    { 
     $collectionConstraint = new Collection(array(
      'recaptcha' => new Recaptcha(), 
     )); 

     return array(
      'data_class' => 'Acme\MyBundle\Entity\User', 
      'validation_constraint' => $collectionConstraint, 
     ); 
    } 

एक बात मैं इस विधि के बारे में पता नहीं है, इस बाधा संग्रह अपने validation.yml साथ विलय हो जाएगा कि क्या है या यह इसके ऊपर लिख देगा अगर है।

आपको this article पढ़ना चाहिए जो संस्थाओं और अन्य गुणों के सत्यापन के साथ फ़ॉर्म सेट अप करने के लिए उचित प्रक्रिया में थोड़ी अधिक गहराई से बताता है। यह मोंगोडीबी के लिए विशिष्ट है लेकिन किसी भी सिद्धांत इकाई पर लागू होता है। इस आलेख के बाद, अपने recaptcha फ़ील्ड के साथ बस अपने termsAccepted फ़ील्ड को प्रतिस्थापित करें।

+0

ग्रेट आलेख, धन्यवाद! – tamir

+2

सिम्फनी 2.1 के बाद, 'property_path = false' के बजाय 'mapped = false' का उपयोग किया जाना चाहिए, http://symfony.com/doc/current/reference/forms/types/form.html#property-path और http: //symfony.com/doc/current/reference/forms/types/form.html#mapped, क्रमशः। –

संबंधित मुद्दे