2010-09-26 13 views
9

Me gustaría integrar Propel con Zend framework. He visto la integración de la doctrina en el pasado, pero this post dice que parece que la propulsión se hace de forma un poco diferente.Cómo Zend Framework con Propel ORM

Propel tiene dos cosas a su favor ya: la primera es que Propel incluye su propio cargador automático, lo que significa que no tenía la fuerza para tratar de Propel en la estructura del sistema de archivos Zend Framework ‘s. El segundo es que Propel está diseñado para permitirle colocar sus archivos en cualquier lugar que desee con facilidad, siempre y cuando actualice correctamente su include path. Esto hizo que el proceso fuera mucho más fácil de lo que pensé que sería.

Pero la publicación no entra en detalles completos sobre cómo terminarla. Supongo que tengo que modificar el ZendBootstrap.php y application.ini (estoy usando el último Zend 1.10.8), pero me resulta difícil encontrar una publicación sobre la última versión de Zend con la última versión de Propel.

¿Alguien puede comentar cómo hacerlo de la manera más suave posible?

otra pregunta: ¿Propel tiene una interfaz de línea de comandos o no necesito una interfaz de línea de comandos para propel si estoy usando la interfaz de línea de comandos de Zend?

Respuesta

11

que no he utilizar Propel exterior de Symfony, pero por lo que sé de Propel, pero yo creo que algo como lo siguiente funcionaría para las cosas de tiempo de ejecución:

En su archivo de arranque

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(); 
} 

En su aplicacion.xml (adaptarse a ini si eso es lo que usted prefiere)

<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> 

Por supuesto que esto no es realmente la integración completa en lo que respecta a im ... pero debería ser suficiente para ponerlo en funcionamiento sin demasiada molestia. Si vale la pena invertir en este proyecto, seguiría adelante y crearía un recurso de aplicación. Ejecute una compilación de propel y observe la matriz compilada de php. A continuación, asócielo a xml o ini e incrústelo directamente en el archivo de configuración de la aplicación. A continuación, modifique su initPropel para manejarlo como:

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(); 
} 

Si quieres puedes cargar aun no directamente la matriz como analizada desde el archivo de configuración, pero en lugar de crear un objeto PropelConfiguration y establecer programtically todos sus parámetros, a continuación, pasar eso a setConfiguration.

En cuanto a las herramientas de compilación, he encontrado integrarse con Zend_Tool para ser una dura prueba, así que tiendo a confiar en phing o scripts de shell personalizados para todo eso. A menos que planee usar Propel en muchos proyectos, probablemente no tenga tiempo para implementar este nivel de integración.Lo hice con Doctrine 1.xa mientras estaba de vuelta y me llevó un par de semanas resolver todos los problemas :-)

+0

¿Cómo me adapto a ini? No tengo idea –

+0

@rodrigo: debería ser una traducción bastante fácil ya que la estructura no es compleja ... creo que puedes analizar las constantes directamente en el INI, así que todo lo que tienes que hacer es usar los pares clave de valores en la sección correcta . Por otra parte, podría estar equivocado, nunca uso el formato INI. Si no puedes resolverlo, publicaré una nueva pregunta al respecto ... obtendrás más respuesta de esa manera :-) – prodigitalson

1

Coloco la biblioteca Propel en "Su Zend_Project/library" con una carpeta llamada Propel que tiene el carpeta de tiempo de ejecución en él.

Luego coloco este trozo de código en mi 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(); 

} 

Mis Propel archivos de configuración están en las "su proyecto Zend/aplicación/configs"

También es necesario modificar el archivo index.php por lo que encontrar los modelos ORM que ha generado:

set_include_path (implosión (parámetro PATH_SEPARATOR, array ( realpath (APPLICATION_PATH '/../library'), realpath (APPLICATION_PATH '/ modelos'), get_include_path(), ))..);

Coloque sus modelos en el nombre de su "Proyecto Zend/aplicación/Modelos/base de datos" que se establece en su schema.xml por la propiedad xml en la etiqueta "database name =" orm "".

1

Simplemente intente agregar init de propel al archivo index.php pero ANTES de configurar el proceso de autocarga. En este caso Zend_Autoloader no puede interactuar con el mecanismo de autocarga de Propel. Para mí funciona bien, pero no estoy seguro de que sea un buen diseño ...)