2011-12-13 22 views
17

Doctrine2 कोर में DriverManager.php को संशोधित किए बिना मैं अपना कस्टम ड्राइवर कैसे जोड़ सकता हूं?सिद्धांत 2 - कस्टम डीबीएएल ड्राइवर कैसे जोड़ें?

मैंने pdo_dblib के लिए एक डीबीएएल ड्राइवर बनाया है और इसे एक सिम्फनी 2 बंडल के अंदर रखा है। यह ठीक काम करता है, फिर भी मैं DriverManager.php में हार्ड-कोडेड ड्राइवरों की एक सूची के लिए अपने ड्राइवर को जोड़ना होगा, नहीं तो मैं निम्नलिखित अपवाद: जब तक मैं संशोधित

अपवाद

[Doctrine\DBAL\DBALException]                                     
The given 'driver' pdo_dblib is unknown, Doctrine currently supports only the following drivers: pdo_mysql, pdo_sqlite, pdo_pgsql, pdo_oci, oci8, ibm_db2, pdo_ibm, pdo_sqlsrv 

DriverManager.php

final class DriverManager 
{ 
    private static $_driverMap = array(
     'pdo_dblib' => 'Doctrine\DBAL\Driver\PDODblib\Driver', // Added this line 
    ); 
} 

यहाँ मेरी config.yml है:

# Doctrine Configuration 
doctrine: 
    dbal: 
     driver:   pdo_dblib 
     driver_class: PDODblibBundle\Doctrine\DBAL\Driver\PDODblib\Driver 
+0

आप अपने PDODblib फ़ोल्डर साझा कर सकते हैं के रूप में मैं इस मुद्दे को भर में अच्छी तरह से आए हैं, यह भी तुमने किया था कोर को संशोधित किए बिना कस्टम ड्राइवर जोड़ने का कोई तरीका ढूंढने का प्रबंधन करें? – Matt

+1

मुझे Doctrine2 कोर को संशोधित किए बिना ड्राइवर जोड़ने का कोई तरीका नहीं मिला है। हालांकि आप यहां बंडल को देख सकते हैं: http://github.com/trooney/PDODblibBundle – rooney

+0

किसी भी व्यक्ति के लिए इस पथ पर जाने के लिए: अनुपयुक्त है PHP svn add lastInsertId और pdo_dblib ड्राइवर को लेनदेन समर्थन जोड़ता है। Http://svn.php.net/viewvc/php/php-src/trunk/ext/pdo_dblib/dblib_driver.c?view=log (rev। 300647 और 300647) – rooney

उत्तर

25

तुम वास्तव में, बस चालक विन्यास विकल्प completlely बाहर छोड़ सकते हैं।

आपको परिभाषित करने की आवश्यकता है driver_class विकल्प है। ड्राइवर को केवल डिफ़ॉल्ट ड्राइवर वर्गों के लिए आंतरिक लुकअप करने के लिए उपयोग किया जाता है, जब तक आप केवल कक्षा प्रदान करते हैं, यह लुकअप करने में विफल नहीं होगा।

Btw: कोई रास्ता नहीं (एक पूरा डिफ़ॉल्ट सेटअप में) parameters.ini में यह परिभाषित करने के लिए नहीं है, तो आप

Btw config.yml अंदर यह सीधे बदलना होगा: एक और दोष के कारण (चालक गिरने विशिष्ट क्षेत्र में mysql पर वापस), आप कॉन्फ़िगरेशन में वर्णसेट सेट नहीं कर सकते हैं, क्योंकि यह वर्णमाला सेट करने के लिए एक MySQL ईवेंट हैंडलर पंजीकृत करेगा।

तो मेरी mssql_ के आधार पर मेरा अंतिम सिद्धांत config * आधारित कार्यान्वयन की तरह निम्नलिखित और समस्याओं के बिना काम करता है दिखता है:

# Doctrine Configuration 
doctrine: 
    dbal: 
     #driver: %database_driver% 
     driver_class: Doctrine\DBAL\Driver\MsSql\Driver 
     host:  %database_host% 
     port:  %database_port% 
     dbname: %database_name% 
     user:  %database_user% 
     password: %database_password% 
     #charset: UTF8 

    orm: 
     auto_generate_proxy_classes: %kernel.debug% 
     auto_mapping: true 
+1

यह वही है जो मैं ढूंढ रहा था! बहुत धन्यवाद! –

+1

एमएसएसक्ल चालक का नाम बदलकर संस्करण 2.2 के बाद से SQLSrv कर दिया गया है –

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