2012-08-27 10 views
5

के लिए ट्रिगर नहीं होती है मेरे पास एक डॉक्टर उपयोगकर्ता इकाई है जिसे मैं पंजीकरण फॉर्म के लिए फॉर्म सत्यापनकर्ता जोड़ने की कोशिश कर रहा हूं लेकिन वे किसी भी शर्त के तहत पंजीकरण फॉर्म के लिए आग नहीं लेते हैं।प्रमाणीकरण बाधा पंजीकरण फॉर्म

मेरे उपयोगकर्ता इकाई:

namespace My\AppBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class UserType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('email','email'); 
     $builder->add('username','text'); 
     ... 
    } 

    public function getDefaultOptions(array $options) 
    { 
     return array(
      'data_class' => 'My\AppBundle\Entity\User', 
      'validation_groups' => array('registration'), 
     ); 
    } 

    public function getName() 
    { 
     return 'user'; 
    } 
} 

और अंत में, पंजीकरण फार्म:

namespace JMSHockey\AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Security\Core\User\AdvancedUserInterface; 
use Symfony\Component\Validator\Constraints as Assert; 
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; 
/** 
* My\AppBundle\Entity\User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity(repositoryClass="My\AppBundle\Entity\UserRepository") 
* @UniqueEntity(fields={"email"}, message="Sorry, this email address is already in use.", groups={"registration"}) 
* @UniqueEntity(fields={"username"}, message="Sorry, this username is already taken.", groups={"registration"}) 
*/ 
class User implements AdvancedUserInterface,\Serializable 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string $email 
    * 
    * @ORM\Column(name="email", type="string", length=75, nullable=false) 
    * @Assert\Email() 
    * @Assert\NotBlank() 
    */ 
    private $email; 

    /** 
    * @var string $username 
    * 
    * @ORM\Column(name="username", type="string", length=75, nullable=false) 
    * @Assert\NotBlank() 
    */ 
    private $username; 

    ... 
    } 

यहाँ मेरी प्रयोक्ता प्रकार प्रपत्र है

namespace My\AppBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 

class RegistrationType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('user', new UserType()); 
    } 

    public function getName() 
    { 
     return 'registration'; 
    } 
} 

ऐसा लगता है कि मैं कुछ स्पष्ट याद आ रही किया जाना चाहिए यहां, लेकिन सिम्फनी मैनुअल और संसाधनों के बीच जो मैंने ऑनलाइन पाया है, मैं अलग करने में सक्षम नहीं हूं यह है कि यह क्या है।

+1

आप [सक्षम] है (http://symfony.com /doc/current/book/validation.html#configuration) सत्यापन के लिए एनोटेशन? – meze

+0

हां, मेरे पास 'सत्यापन है: {enable_annotations: true}' फ्रेमवर्क अनुभाग के तहत मेरी config.yml में सेट है। –

+0

क्या आपने विशेष रूप से अपने पंजीकरण प्रकार पर cascade_validation सेट करने का प्रयास किया है? – m0c

उत्तर

0

आपको यह समूह विकल्प कहां मिला?

आप इसे खाली छोड़ सकते हैं ताकि यह इस इकाई के लिए ट्रिगर किया जा सके। यदि आप एक इकाई निर्दिष्ट करना चाहते हैं, तो ऐसा लगता है कि आपको एम विकल्प का उपयोग करना चाहिए।

http://symfony.com/doc/master/reference/constraints/UniqueEntity.html#em

+0

समूह विकल्प इसलिए है कि बाधा केवल पंजीकरण फ़ॉर्म में रवाना हो गई है। मैं नहीं चाहता कि बाधा प्रत्येक अद्यतन पर आग लग जाए, या अन्यथा ऑब्जेक्ट कभी भी ई-मेल पते को बदले बिना अद्यतन नहीं किया जा सकता है। –

+0

@ एंडी, यह गलत है। जब आप ईमेल या उपयोगकर्ता नाम बदलने के बिना ऑब्जेक्ट को अपडेट करने का प्रयास करते हैं तो सत्यापन विफल नहीं होगा। यह सत्यापन जांचता है कि यह फ़ील्ड अद्वितीय है, यानी कि किसी अन्य रिकॉर्ड में यह मान नहीं है। इसे अपडेट करते समय इसे आईटीएसईएलएफ के खिलाफ नहीं देखा जाएगा, इसलिए यह कोई समस्या नहीं होगी। क्या आपने validation_group और समूह विकल्पों को हटाने का प्रयास किया है और देखें कि यह काम करता है या नहीं? –

2

मैं एक ही समस्या थी।

मैं अपने RegistrationType कक्षा में setDefaultOptions विधि में सच में जोड़ा cascade_validation से इसका समाधान नहीं होता और OptionsResolver Symfony घटक से OptionsResolverInterface वर्ग प्रयोग किया है:

namespace My\AppBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface 

class RegistrationType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('user', new UserType()); 
    } 

    public function getName() 
    { 
     return 'registration'; 
    } 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'cascade_validation' => true 
     )); 
    } 
}