zend mac how framework curso composer php zend-framework

php - mac - Integración de scripts externos con Zend Framework



zend framework pdf (6)

¿Cuál es la mejor manera de integrar un script externo en Zend Framework? Déjame explicarte porque puedo estar preguntando esto de la manera incorrecta. Tengo un script que descarga y analiza un archivo XML. Este script, que se ejecuta como un trabajo cron diario, necesita volcar sus datos en la base de datos.

Estoy usando Zend Framework para el sitio que usa este script y me parece que lo mejor sería usar mi modelo subclase de Zend_Db_Abstract para hacer la adición y actualización de la base de datos. ¿Cómo hace uno para hacer esto? ¿Mi script va a la biblioteca al lado de los Zend Components (es decir, library / Mine / Xmlparse.php) y, por lo tanto, tiene acceso a los diversos componentes de ZF? ¿Simplemente necesito incluir los archivos de modelo correctos y el componente Zend DB en el archivo? ¿Cuál es la mejor manera de manejar este tipo de integración?


Acabo de encontrar algo que puede ser relevante para esta pregunta. Este artículo de developerWorks de IBM.

El autor recomienda simplemente crear una carpeta de scripts en la jerarquía de ZF y usarla como normalmente lo haría dentro de ZF (aunque sí establece la ruta de ini y llama a autocarga). ¿Es así de simple? ¿El simple hecho de estar en la jerarquía del marco y de incluir la ruta y el autocargador le otorga a su script acceso a todos los objetos?


No estoy 100% seguro de lo que intentas preguntar, pero intentaré ayudarte. Si en algún momento agrega una referencia a "/ ruta / a / zend / framework" en su ruta de inclusión de php, entonces, en esencia, ha habilitado Zend Framework. A partir de ahí si lo haces:

require_once(''Zend/Loader.php''); Zend_Loader::registerAutoload();

Luego, en cualquier punto de su secuencia de comandos, puede simplemente crear nuevos objetos de Zend Framework y Zend_Loader se encargará del resto.

Sin embargo, una de las cosas más importantes del Zend Framework no es forzarlo a hacer las cosas de cierta manera. Es por eso que a veces hay varias maneras de lograr lo mismo. Entonces, si sientes que necesitas hacer que tu script use Zend Framework por el simple hecho de hacerlo, esto no es realmente necesario. Pero si crees que puede mejorar tu guión de alguna manera, entonces hazlo.


Normalmente pongo cosas personalizadas que creo que podrían usarse en proyectos en una carpeta personalizada de la biblioteca. Entonces tengo una carpeta de biblioteca / Ak33m que tiene scripts que pueden estar fuera del marco.


Sí, debe colocar sus propias clases que tal vez hereden las clases de Zend Framework o agregar más clases en su propia carpeta junto a la carpeta de Zend Framework en la biblioteca.

Cuando haya habilitado la carga automática de Zend_Loader, los nombres de las clases se asignarán automáticamente a la clase que haya creado, por ejemplo:

My_Db_Abstract will map to My/Db/Abstract.php .


En el directorio de su biblioteca, debe tener su propia biblioteca junto a la carpeta de la biblioteca Zend. Como sea que lo llames (Mylib, Project, ...) deberías incluirlo en el autocargador Zend y eso se hace de la siguiente manera:

require_once ''Zend/Loader/Autoloader.php''; $loader = Zend_Loader_Autoloader::getInstance(); $loader->registerNamespace(''Project_''); $loader->setFallbackAutoloader(true); if ($configSection == ''development'') { $loader->suppressNotFoundWarnings(false); }

Para que su biblioteca se integre bien con ZF y el autocargador, debe seguir las convenciones de nomenclatura de ZF. Esto significa dos cosas:

  • si amplía una clase ZF existente, replique la estructura de la carpeta ZF para que su archivo tenga la misma ruta y nombre, excepto el nombre de la biblioteca. Por ejemplo, /library/Zend/Db/Abstract.php => /library/Project/Db/Abstract.php.
  • si escribe sus propias clases, siga las convenciones de nomenclatura de ZF para que el autocargador las encuentre.

Como novato de ZF, creo que entiendo algo de lo que el OP está tratando de descubrir. Entonces, explicaré un poco lo que entiendo con la esperanza de que sea útil para el OP (o más probable, para un futuro lector, ya que la pregunta original es tan antigua y me imagino que OP es ahora una ZF gurú).

Entiendo que ZF afirma ser en gran medida "uso a voluntad", por lo que no necesita comprar una estructura completa, como la Zend_Application, la clase Zend_Bootstrap, todo el enfoque de MVC, etc.

Además, entiendo las convenciones para nombres de clases y ubicaciones de archivos que permiten la carga automática fácil. class App_Model_User : la class App_Model_User reside en una carpeta App/Model/User.php

Creo que lo que puede ser potencialmente confuso es que en el contexto del guión, donde aún no lo has hecho

  • hecho la magia .htaccess que empuja toda solicitud a public/index.php
  • establece tu APPLICATION_PATH e incluye rutas en public/index.php
  • creó su Application o objeto Bootstrap vinculado a un archivo de configuración

puede ser un poco incierto cómo aprovechar la mayor parte de la bondad ZF que obtenemos en ese contexto y queremos en otro contexto.

Supongo que mi respuesta a la pregunta original sería que la secuencia habitual de puntos de entrada

solicitud HTTP -> .htaccess -> index.php -> config

configura gran parte de nuestro entorno para nosotros, tendríamos que duplicar algo de eso para una ruta de entrada diferente.

Entonces, para su secuencia de comandos, mi primer instinto sería crear un archivo de inclusión común que refleje gran parte de lo que sucede en index.php: establezca las rutas de inclusión, APPLICATION_PATH, instancia y llama a un programa de arranque, y luego realiza el procesamiento específico del script .

Aún mejor, podría ser deseable crear un solo punto de entrada para todos sus scripts, como lo hacemos en el contexto http / web. Extienda Zend_Application para su propio script de modo que $application->run(); ya no inicia el procesamiento MVC router-controller-dispatch, sino que hace lo suyo. De esta forma, este punto de entrada de script único se vería casi idéntico al punto de entrada web, la única diferencia es qué objeto de la aplicación se instanciará. Luego, pase el nombre de su clase de Aplicación deseada como un parámetro de línea de comando al script.

Pero aquí confieso tener menos confianza y solo tirar ideas.

Espero que todo esto ayude a alguien. En realidad, me ayudó a escribirlo todo. Gracias y ¡salud!

Actualización 2009-09-29: Acabo de encontrar este artículo: Uso de Zend Framework desde la línea de comandos

Actualización 2009-11-20: Y otro artículo: trabajos de Cron en Zend Framework | Diseño GS

Actualización 2010-02-25: scripts de línea de comandos sencillos con la aplicación Zend - David Caunt