2012-08-17 14 views
7

मैं अपने आवेदन में निम्नलिखित इकाई वर्ग है:मेरा सिम्फनी 2 @ यूनिक एंटीटी बाधा क्यों काम नहीं कर रही है?

<?php 

namespace ...; 

// use ... 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;; 
// ... 

/** 
* @ORM\Table(name="sc_user") 
* @ORM\Entity(repositoryClass="...\UserRepository") 
* @ORM\HasLifecycleCallbacks() 
* @UniqueEntity(fields={"email", "username"}) 
*/ 
class User implements UserInterface, \Serializable, EquatableInterface 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var string $email 
    * 
    * @ORM\Column(name="email", type="string", length=255, unique=true) 
    * 
    * @Assert\NotBlank(groups={"registration"}) 
    * @Assert\Email(groups={"registration"}) 
    */ 
    private $email; 

    /** 
    * @var string $username 
    * 
    * @ORM\Column(name="username", type="string", length=32, unique=true) 
    * 
    * @Assert\NotBlank(groups={"registration"}) 
    */ 
    private $username; 

    // ... 
} 

@UniqueEntity बाधा को नजरअंदाज कर दिया जा रहा है।

@UniqueEntity(fields={"email", "username"}) 

और

@UniqueEntity(fields={"email"}) 
@UniqueEntity(fields={"username"}) 

और, प्रति Symfony2 प्रलेखन यहाँ के रूप में: http://symfony.com/doc/current/reference/constraints/UniqueEntity.html

@UniqueEntity("email") 
@UniqueEntity("username") 

कुछ भी नहीं है मुझे क्या करना, काम करता है मैं सहित विभिन्न जायके की कोशिश की।

SQLSTATE [23,000]:: अखंडता बाधा उल्लंघन: 1062 डुप्लिकेट प्रविष्टि '[email protected]' कुंजी के लिए 'UNIQ_D8183973E7927C74'

इसके बजाय एक रूप प्रमाणीकरण त्रुटि के रूप में उम्मीद होने का, मैं निम्न अपवाद हो रही है

यह गलत है! क्या कोई इस मुद्दे को ठीक करने के बारे में जानता है?

उत्तर

20

समस्या के रूप में हल किया गया था इस प्रकार है:

@UniqueEntity(fields={"email"}, groups={"registration"}) 
@UniqueEntity(fields={"username"}, groups={"registration"}) 

पंजीकरण समूह गुम थे, और मैं दो में उन्हें अलग करने की जरूरत है अलग एनोटेशन

+0

+1 धन्यवाद! कि एक का इलाज काम किया! – coder4show

+2

हाय जोसेफ, एक पुराने सवाल का एक सा लगता है, लेकिन जैसा कि आप था मैं एक ही समस्या हो रही है - बस सोच - आप की जरूरत थी, मुझे पता नहीं है, कहीं कि सत्यापन समूह __create__? मैं केवल ईमेल और सेलफोन पर अद्वितीय इकाई क्षेत्र तुमने किया था बिल्कुल के रूप में जोड़ा है, है, लेकिन यह अभी भी मुझे के बजाय एक अपवाद एक प्रमाणीकरण त्रुटि दे रही है। कोई विचार? – iLikeBreakfast

+1

@iLikeBreakfast आप अपने 'FormType' – ferdynator

1

अपने अनुप्रयोग विन्यास में जोड़ने के लिए प्रयास करें

framework: 
    validation: 
     enable_annotations: true 

11

इस समस्या का एक और कारण यह है कि यदि आप फॉर्म संग्रह का उपयोग कर रहे हैं और एक उप-फॉर्म शामिल करते हैं जो एक संबद्ध इकाई को संभालता है, तो आपको रूट और सभी उप-रूपों में cascade_validation से true सेट करना होगा।

Symfony documentation में संकेत देखें:

CategoryType पर सत्यापन को सक्रिय करने के जोड़ने cascade_validation विकल्प TaskType रहे हैं:

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Acme\TaskBundle\Entity\Task', 
     'cascade_validation' => true, 
    )); 
} 

अद्यतन:

यह सुनिश्चित करने के आपके बच्चे की संस्थाएं मान्य हैं, यहां तक ​​कि एक बेहतर तरीका भी है। सिम्फनी इस कारण से Valid बाधा प्रदान करता है। documentation से:

मान्य
इस बाधा वस्तुओं है कि के रूप में एक वस्तु पर गुण सत्यापित किया जा रहा एम्बेडेड रहे हैं पर सत्यापन सक्षम करने के लिए किया जाता है। यह आपको किसी ऑब्जेक्ट और इसके साथ जुड़े सभी उप-ऑब्जेक्ट को सत्यापित करने की अनुमति देता है।

+0

यह है केवल उपयोगी और सही जवाब यहाँ। – VisioN

3

कृपया ध्यान दें ignoreNull

उदाहरण सही ढंग से पीआईडी ​​के साथ कार्य करे (शून्य हो सकता है):

constraints: 
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: 
    fields: [page, pid, position] 
    errorPath: page 
    groups: [Menu] 
    message: "Page already exists with that parent" 
    ignoreNull: false 
+0

कि मेरी समस्या के लिए जवाब था। धन्यवाद! – nataliastanko

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