2012-02-19 32 views
6

मैं वेब एप्लिकेशन बनाने के लिए ज़ेंड फ्रेमवर्क का उपयोग कर रहा हूं। कई सिफारिशों के आधार पर, मैंने अपनी आरडीबीएम प्रणाली के रूप में सिद्धांत चुना।सिद्धांत में सीएलआई के बिना मैन्युअल रूप से प्रॉक्सी कैसे उत्पन्न करें?

;--------------------------------------------------- 
; DOCTRINE CONFIGURATION 
;--------------------------------------------------- 
resources.entityManager.connection.driver = "pdo_mysql" 
resources.entityManager.connection.host = "localhost" 
resources.entityManager.connection.dbname = "private" 
resources.entityManager.connection.user = "private" 
resources.entityManager.connection.password = "private" 
resources.entityManager.connection.entities = APPLICATION_PATH "/models" 
resources.entityManager.connection.proxies.location = APPLICATION_PATH "/models/Proxies" 
resources.entityManager.connection.proxies.ns = "Proxies" 

; According to Doctrine manual, this should be true for 
; development, and false for production 
resources.entityManager.connection.proxies.generate = true 

उपरोक्त Zend application.ini में मेरी डॉक्टरेट कॉन्फ़िगरेशन है। सबकुछ ठीक काम कर रहा है, लेकिन मैं पहले से जानना चाहता था कि कई कारणों से सीएलआई का उपयोग किये बिना मैन्युअल रूप से प्रॉक्सी कैसे उत्पन्न करें। सबसे पहले, डॉक्टर 2.0 डॉक्टर का उल्लेख है कि ऑटो-जनरेटिंग प्रॉक्सी प्रदर्शन समस्याओं का कारण बनेंगे। सबसे दूसरा, मुझे अभी भी यह पता नहीं लगा है कि सिद्धांत सीएलआई का उपयोग कैसे किया जाए, विशेष रूप से मैंने कमांड प्रॉम्प्ट एक्सेस के बिना अपने प्रोजेक्ट डेवलपमेंट को साझा सर्वर बॉक्स में स्थानांतरित कर दिया है।

मैं कक्षाएं बनाकर मैन्युअल रूप से सिद्धांत संस्थाएं उत्पन्न कर रहा हूं। मैं मैन्युअल रूप से सिद्धांत प्रॉक्सी कैसे उत्पन्न करूं?

$proxyDir = null; //to genearate to default proxy dir 
    $proxyFactory = $em->getProxyFactory(); 
    $metadatas = $em->getMetadataFactory()->getAllMetadata(); 
    $proxyFactory->generateProxyClasses($metadatas, $proxyDir); 

उत्पन्न करने के लिए संस्थाओं का उपयोग करें::

उत्तर

4

मैं आसान तरीका प्रॉक्सी उत्पन्न करने के लिए मिल गया है

$classes = $em->getClassMetadataFactory()->getAllMetadata(); 
    $generator = new \Doctrine\ORM\Tools\EntityGenerator(); 
    $generator->setGenerateAnnotations(true); 
    $generator->setGenerateStubMethods(true); 
    $generator->setRegenerateEntityIfExists(false); 
    $generator->setUpdateEntityIfExists(true); 
    $generator->generate($classes, '/path/to/generate/entities'); 
+0

हम संस्थाओं, हालांकि, अपने कोड ($ metadatas लाइन) की तीसरी पंक्ति हमें त्रुटियां दे रहा है: संदेश के साथ अपवाद अपवाद 'सिद्धांत \ ORM \ मानचित्रण \ मैपिंग अपवाद' फ़ाइल मैपिंग ड्राइवरों के पास एक वैध निर्देशिका पथ होना चाहिए, हालांकि दिया गया पथ गलत लगता है! सी में: \ Zend \ Apache2 \ htdocs \ Webate \ library \ Doctrine \ ORM \ Mapping \ MappingException.php: 193 – Furyvore

+0

आपको EntityManager में प्रॉक्सी पथ सेट करने की आवश्यकता है, यहां मेरी पुरानी प्रोजेक्ट से कोड: '$ config = new \ Doctrine \ ORM \ विन्यास; \t \t $ config-> setMetadataCacheImpl (self :: getCache()); \t \t $ config-> setMetadataDriverImpl (नया \ qweb \ driver \ DoctrineYml (QWEB_MODULE)); \t \t $ config-> setEntityNamespaces (सरणी ('आधार')); \t \t $ config-> setProxyDir (DOCTRINE_PROXIES); \t \t $ config-> setProxyNamespace ('प्रॉक्सी'); \t \t $ कनेक्शन = \ सिद्धांत \ DBAL \ DriverManager :: getConnection (self :: loadYml (QWEB_CONFIG.DIRECTORY_SEPARATOR.'databases.yml ')); \t \t $ em = \ Doctrine \ ORM \ EntityManager :: बनाएं ($ कनेक्शन, $ config); ' –