2012-09-22 14 views
6

में विस्तारित करना मैं ZF2 के लिए काफी नया हूं। मेरे पास ZF1 में मेरी प्रोजेक्ट से सिद्धांत इकाइयों का एक गुच्छा है, एक उपयोगकर्ता इकाई है।ZFcUserDoctrineORM की उपयोगकर्ता इकाई को ZF2

मैं \ ZfcUserDoctrineORM \ Entity \ उपयोगकर्ता का विस्तार करने की कोशिश कर रहा हूं ताकि मैं अपने पुराने रिश्तों को आगे बढ़ा सकूं - लेकिन कोई बड़ी सफलता नहीं।

यदि मैं स्कीमा जेनरेटर ./doctrine-module orm:schema-tool:create को आजमाकर चलाता हूं तो मुझे एक त्रुटि मिलती है कि टेबल नाम उपयोगकर्ता पहले से मौजूद है।

अब तक मैं कक्षा का विस्तार और UserEntityClass

return array(
    'zfcuser' => array(
     'UserEntityClass' => '\Application\Entity\User', 
    ), 
); 

वहाँ doen't अभी तक के रूप में मॉड्यूल के लिए किसी भी प्रलेखन होने लगते हैं के रूप में अपने वर्ग की स्थापना की कोशिश की है।

उत्तर

7

तो समस्या यह थी कि डिफ़ॉल्ट ZfcUserDoctrineORM इकाइयां अभी भी खेल में थीं। इसे हल करने के लिए आप EnableDefaultEntities को झूठी में सेट कर सकते हैं:

return array(
    'zfcuser' => array(
     'UserEntityClass' => '\Acme\Entity\User', 
     'EnableDefaultEntities' => false 
    ), 
); 
2

मैं यहां स्मृति से जा रहा हूं, क्योंकि मैंने कुछ समय पहले ZfcUser [DoctrineORM] के साथ खेला था।

आप कुछ भी विस्तार नहीं करना चाहते हैं। इसके बजाय, बस अपनी खुद की उपयोगकर्ता इकाई लिखें और इसे ZfcUser \ Entity \ UserInterface को कार्यान्वित करें।

फिर सुनिश्चित करें कि आप अपनी कॉन्फ़िगरेशन को सही तरीके से सेट करें (डिफ़ॉल्ट के बजाय UserInterface के अपने कार्यान्वयन का उपयोग करने के लिए), और आपको जाने के लिए अच्छा होना चाहिए।

+0

हाय timdev, यही वह है जो मैं वर्तमान में कोशिश कर रहा हूं। मैं /config/autoload/ZfcUserDoctrineORM.global.php 'वापसी सरणी में एक ग्लोब कॉन्फ़िग फ़ाइल है ( 'zfcuser' => सरणी ( 'UserEntityClass' => '\ WriplCom \ इकाई \ उपयोगकर्ता'), , ); 'मुझे लगता है कि मेरी समस्या या तो मेरी कॉन्फ़िगरेशन फ़ाइल है, या मैं इस योजना को उत्पन्न करने के लिए सिद्धांत क्ली उपकरण प्राप्त करने की कोशिश कर रहा हूं, या दोनों। – briangallagher

0

हालांकि ओपी का उत्तर सही है, यह पूरा नहीं हुआ है। मैंने जो किया और नीचे क्यों।

अपनी उपयोगकर्ता इकाई बनाएं। सार तत्व ईंटिटी का उपयोग मेरी सभी संस्थाओं के लिए किया जाता है, जिसमें केवल आईडी प्रॉपर्टी, गेटर्स/सेटर और एंटीटी डिबगिंग के लिए कुछ वैश्विक कार्यक्षमता होती है।

'zfcuser' => [ 
    //Some other config 
    'userEntityClass' => User::class, 
    'EnableDefaultEntities' => false, 
], 

module.config.php

012,351:

User.php

use Doctrine\ORM\Mapping as ORM; 
use Keet\Mvc\Entity\AbstractEntity; 
use ZfcUser\Entity\UserInterface; 

/** 
* Entity Class representing a post of our User module. 
* 
* @ORM\Entity 
* @ORM\Table(name="users") 
* @ORM\Entity(repositoryClass="Keet\User\Repository\UserRepository") 
* @ORM\HasLifecycleCallbacks 
*/ 
class User extends AbstractEntity implements UserInterface 
{ 
    /** 
    * @var string 
    * @ORM\Column(name="username", type="string", length=255, unique=true, nullable=false) 
    */ 
    protected $username; 

    /** 
    * @var string 
    * @ORM\Column(name="email", type="string", length=255, unique=true, nullable=false) 
    */ 
    protected $email; 

    /** 
    * @var string 
    * @ORM\Column(name="display_name", type="string", length=255, nullable=false) 
    */ 
    protected $displayName; 

    /** 
    * @var string 
    * @ORM\Column(name="`password`", type="string", length=255, nullable=false) 
    */ 
    protected $password; 

    /** 
    * @var int 
    * @ORM\Column(name="state", type="integer", length=3, nullable=false) 
    */ 
    protected $state = 1; 

    // Getters/Setters 
} 

zfcuser.config.php

OP's answer रूप में एक ही config शामिल

महत्वपूर्ण: zfcuser की डिफ़ॉल्ट सिद्धांत इकाई कॉन्फ़िगरेशन को ओवरराइट करें!

'doctrine' => [ 
    'orm_autoload_annotations' => true, 
    'driver' => [ 
     __NAMESPACE__ . '_driver' => [ 
      'class' => 'Doctrine\\ORM\\Mapping\\Driver\\AnnotationDriver', 
      'cache' => 'array', 
      'paths' => [ 
       __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'src' 
       . DIRECTORY_SEPARATOR . 'Entity', 
      ] 
     ], 
     'orm_default'    => [ 
      'drivers' => [ 
       __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver', 
       'ZfcUser\Entity' => __NAMESPACE__ . '_driver' 
      ], 
     ], 
     'zfcuser_entity' => [ // Section overwrites the default config for location of Annotation. Original found 
      // in vendor ZfcUserDoctrineModule /config/xml/zfcuser/ZfcUser.Entity.User.dcm.xml 
      'class' => 'Doctrine\\ORM\\Mapping\\Driver\\AnnotationDriver', 
      'paths' => 
       __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'src' 
       . DIRECTORY_SEPARATOR . 'Entity', 
     ], 
    ], 
], 

में आप ऊपर सामान्य रूप से सिर्फ 'driver' और 'orm_default' कॉन्फ़िगरेशन होगा। ZfcUser मॉड्यूल में 'zfcuser_entity' कॉन्फ़िगरेशन है, लेकिन इसे अपने स्वयं के मॉड्यूल के भीतर ड्राइवर को इंगित करता है। किसी भिन्न ड्राइवर के फ़्लोटिंग संदर्भ के लिए, इसे ओवरराइट करें और इसे अपने स्वयं के परिभाषित ड्राइवर की ओर इंगित करें, जिसे __NAMESPACE__ . '_driver' द्वारा परिभाषित किया गया है। इसके अलावा, मेरे उदाहरण में मैं एनोटेशन पढ़ने के लिए AnnotationDriver का उपयोग करता हूं, जबकि ZfcUser मॉड्यूल XmlDriver का उपयोग करता है।नीचे

ZfcUser मॉड्यूल config यह मूल config, ऊपर के उदाहरण

'zfcuser_entity' => array(
    'class' => 'Doctrine\ORM\Mapping\Driver\XmlDriver', 
    'paths' => __DIR__ . '/xml/zfcuser' 
), 

इस config आप पूरी तरह से अपनी खुद की इकाई का उपयोग करने की अनुमति देता है में ओवरराइट है, लेकिन अभी भी ZfcUser मॉड्यूल का उपयोग करें।

मेरे मामले में मैं अपने स्वयं के लिखित सीआरयूडी कार्यों के साथ अपने AbstractActionController का उपयोग कर सकता हूं, जो कि AbstractEntity के बच्चे की अपेक्षा करता है। यह बहुत सारे लेखन/सोच को बचाता है;)

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