2010-09-26 11 views
9

Mi piacerebbe integrare Propel con Zend framework. Ho visto l'integrazione della dottrina in passato ma lo this post dice che sembra che la propulsione sia fatta in modo un po 'diverso.Come Zend Framework con Propel ORM

Propel ha due cose in corso per questo già: la prima è che Propel include il proprio caricatore automatico, il che significa che non ho avuto la forza per cercare di Propel nella struttura del file system Zend Framework s’. Il secondo è che lo standard Propel è progettato per consentire di mettere i suoi file ovunque si desideri con facilità, a patto che si aggiorni correttamente il include path. Ciò ha reso il processo molto più facile di quanto pensassi.

Ma il post non entra nei dettagli completi su come completarlo. Sto indovinando che devo modificare il ZendBootstrap.php e application.ini (Sto usando l'ultimo Zend 1.10.8), ma trovo difficile trovare un post sull'ultima versione dicon l'ultima versione di Propel.

Chiunque può commentare come farlo nel modo più agevole possibile?

un'altra domanda: è Propel ha un'interfaccia a riga di comando o non ho bisogno di un'interfaccia a riga di comando per propel se sto usando l'interfaccia a riga di comando di Zend?

risposta

11

I havent utilizzare Propel al di fuori di Symfony, ma da quello che so di Propel ma vorrei pensare qualcosa come il seguente avrebbe funzionato per le cose di runtime:

Nel vostro bootstrap

public function initPropel() 
{ 
    require_once 'Propel.php'; 
    Propel::init($this->getOptions('propelConfig')); 

    // so we can get the connection from the registry easily 
    return Propel::getConnection(); 
} 

Nella tua application.xml (adattarsi alle ini se è ciò che si preferisce)

<applicationConfiguration xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/"> 
    <production> 
    <!-- other stuff --> 
    <includePaths> 
     <propelRuntime><zf:const zf:name="APPLICATION_PATH" />/../library/propel/runtime</propelRuntime> 
    </includePaths> 
    <propelConfig><zf:const zf:name="APPLICATION_PATH" />/configs/propel-runtime.php</propelConfig> 
    <!-- other stuff --> 
    </production> 
</applicationConfiguration> 

Naturalmente questo non è l'integrazione davvero pieno per quanto riguarda im ... ma dovrebbe essere sufficiente per farti funzionare senza problemi. Se vale la pena investire in questo progetto, andrò avanti e creerò una risorsa per le applicazioni. Esegui una build di propel e dai un'occhiata all'array php compilato. Quindi mappalo a xml o ini e incorporalo direttamente nel file di configurazione dell'applicazione. Quindi modificare il tuo initPropel di gestire la cosa come:

public function initPropel() 
{ 
    require_once 'Propel.php'; 
    Propel::setConfiguration($this->getOptions('propelConfig')); 
    Propel::initialize(); 

    // so we can get the connection from the registry easily 
    return Propel::getConnection(); 
} 

Se si volesse si potrebbe caricare, anche non direttamente l'array come analizzato dal file di configurazione, ma invece creare un oggetto PropelConfiguration e modo pianificato impostare tutti i parametri, quindi passare che a setConfiguration.

Per quanto riguarda gli strumenti di compilazione, Ive ha trovato l'integrazione con Zend_Tool per essere un calvario, quindi tendo a fare affidamento su phing o script di shell personalizzati per tutto questo. A meno che non si preveda di utilizzare Propel su molti progetti, probabilmente non è il momento di implementare questo livello di integrazione.L'ho fatto con Doctrine 1.xa e ho impiegato un paio di settimane per risolvere tutti i problemi :-)

+0

Come si adatta a ini? Non ho idea di –

+0

@rodrigo: dovrebbe essere una traduzione abbastanza semplice dato che la struttura non è complessa ... penso che tu possa analizzare le costanti direttamente nell'ini così tutto ciò che devi fare è usare le coppie di valori chiave nella sezione corretta . Poi di nuovo potrei sbagliarmi, non uso mai il formato INI. Se non riesci a capirlo, vorrei pubblicare una nuova domanda al riguardo ... avrai più risposta in questo modo :-) – prodigitalson

1

Posiziono la libreria Propel in "Il tuo Zend_Project/libreria" con una cartella chiamata Propel che ha il cartella di runtime in esso.

Quindi inserisco questo blocco di codice nel mio bootstrap.php.

protected function _initPropel() 
{ 
    //require Propel Library 
    require '../library/Propel/runtime/lib/Propel.php'; 

    //initialize Propel configuration 
    Propel::init(APPLICATION_PATH . '/configs/orm-conf.php'); 

    //initialize Propel connection 
    Propel::initialize(); 

    //return Propel Connection 
    return Propel::getConnection(); 

} 

miei Propel file di configurazione sono nella sezione "Il tuo Zend progetto/applicazione/configs"

È inoltre necessario modificare il file index.php in modo da trovare i modelli ORM che avete generato:

set_include_path (implodere (costante PATH_SEPARATOR, array ( realpath (APPLICATION_PATH '/../library'), realpath (APPLICATION_PATH '/ modelli'), get_include_path(), ))..);

Si posizionano i modelli nel proprio nome "Zend Project/application/Models/database" impostato nello schema.xml dalla proprietà xml nel tag "database name =" orm "".

1

Basta provare ad aggiungere init di propel al file index.php ma PRIMA di impostare il processo di caricamento automatico. In questo caso, Zend_Autoloader non può interagire con il meccanismo di autoloading di Propel. Per me funziona bene, ma non sono sicuro che sia un buon design ...)