2012-04-04 15 views
6

Me gustaría saber cuál es la mejor manera de incluir archivos php de terceros en symfony2. Estoy usando un paquete php - ajax diferente para cargar archivos en mi aplicación symfony2. El paquete me ofrece algunos códigos php oops que necesito usar en mi controlador symfony. Estoy creando objetos de ese código en mi controlador. Entonces me gustaría saber dónde puedo poner ese código o archivo de terceros y cómo puedo incluir o crear objetos de ese código en mi controlador symfony2. ¿Usamos require o include en symfony2 también? Si es así, ese es el único enfoque.Mejor enfoque Para incluir archivos de terceros con Symfony2

Respuesta

7

No estoy tan seguro de tratar de agregar espacios de nombres a una biblioteca de terceros. Twig, por ejemplo, no usa espacios de nombre. Y realmente no hay necesidad. Considere, por ejemplo, un caso en el que desee usar el componente PDF de la biblioteca Zend_Framework 1.

En el archivo app/autoload.php que haría algo como:

$loader->registerPrefixes(array(
    'Twig_Extensions_' => $ws . 'Symfony/vendor/twig-extensions/lib', 
    'Twig_'   => $ws . 'Symfony/vendor/twig/lib', 
    'Zend_'   => $ws . 'ZendFramework-1.0.0/library', 
)); 

// And since Zend internally uses require/include we need to set an include path 
ini_set('include_path','.' . 

    PATH_SEPARATOR . $ws . 'ZendFramework-1.0.0/library' 

); 

En este punto debemos ser capaces de crear objetos 3º parte interior de los controladores mientras que dejan el sistema de carga automática hacerse cargo de la búsqueda y incluyendo las clases:

$page = new \Zend_Pdf_Page(\Zend_Pdf_Page::SIZE_A4); 
    $doc->pages[] = $page; 

    $font1 = \Zend_Pdf_Font::fontWithName(\Zend_Pdf_Font::FONT_HELVETICA); 
    $font2 = \Zend_Pdf_Font::fontWithName(\Zend_Pdf_Font::FONT_COURIER_BOLD); 

Usted tiene que usar el \ para evitar la falta de espacios de nombres.

Esta respuesta asume que su biblioteca de 3ra parte sigue la convención de nomenclatura de clase más o menos estándar. Si tiene su propia funcionalidad de carga automática, solo llámala desde autolaod.php también. Y si no desea utilizar la carga automática, configure la ruta de inclusión e inclírela.

+1

Esta es la forma correcta de hacerlo. Si una biblioteca no sigue ninguna convención de nombres, le sugiero que empiece a usar el compositor ([repo] (https://github.com/composer/composer), [symfony] (https://github.com/symfony/symfony). -estándar)). Permite el mapeo de cualquier biblioteca, haciendo que la carga automática sea posible incluso para aquellas bibliotecas que no sigan la convención. – gilden

3

The documentation explica la estructura del directorio en detalle.

Básicamente, puede colocarlos donde desee, pero para mantener la coherencia y seguir las mejores prácticas, debe colocar sus bibliotecas de terceros en el directorio vendor/.

Que puede incluir los archivos relevantes con espacios de nombres.

+1

¡Excelente respuesta! Tuve esta situación hace un tiempo y la resolví exactamente así ... –

+0

@Hakan Deryal. Gracias por su respuesta, ¿puede decirme si creé una carpeta como tercero en el proveedor y coloco mi archivo de terceros allí de tal manera que vendor/thirdparty/myfile.php cómo podría incluirlo en mi paquete de Acme. – ScoRpion

+0

¿La aplicación de terceros usa espacios de nombres? Puede verificarlo buscando una línea en la parte superior del archivo como 'namespace ....' –

Cuestiones relacionadas