2011-11-16 24 views
33

Actualmente estoy actualizando uno de nuestros proyectos a CakePHP 2.0. Lamentablemente, la "primera línea" de código crea problemas, y no puedo encontrar una solución a ese problema.Cargando archivos de proveedores en CakePHP 2.0

En CakePHP 1.3 tuve una declaración App::import("Vendor", "facebook"); justo antes de que se definiera la clase AppController. El archivo al que se hace referencia se encuentra en /app/vendors/facebook/facebook.php (y se incluye en el archivo base_facebook.php).

He intentado muchas maneras diferentes para incluir el archivo ahora en CakePHP 2.0 de acuerdo con la nomenclatura de archivos y la clase de carga descritos aquí: File naming and class loading changes in CakePHP 2.0

Retitulé el camino a app/Vendor/Facebook/Facebook.php, o app/Vendor/Facebook/facebook.php, e intentaron siguientes métodos:

App::uses("Facebook", "Vendor/Facebook"); 
App::uses("Facebook", "Facebook"); 
App::uses("Facebook", "Vendor/Facebook/Facebook.php"); 
App::uses("Facebook", "Vendor"); 

¿Alguien ha encontrado una forma de referenciar un archivo de proveedor todavía? Debido a la carga diferida, los métodos anteriores no desencadenan un error/advertencia, por lo que es un poco molesto depurar esto ...

Respuesta

53

Los proveedores no pueden cargarse usando App::uses() en CakePHP, esto es porque CakePHP no puede esperar que las bibliotecas externas sigan los mismos estándares con respecto a la nomenclatura de carpetas y archivos. Todavía puede usar App::import('Vendor', ...) como lo hizo en la versión 1.3 del marco.

Ahora, usar App::import() para vendedores es algo tonto, si lo piensas bien. Es simplemente una envoltura cara, prolija y muy tonta para require_once().

En 2.0, realmente alentamos a las personas a utilizar require o require_once para sus bibliotecas de proveedores. Puede obtener la ubicación de la carpeta del proveedor usando App::path('Vendor') o simplemente APP . 'Vendor' . DS.

+0

Hola José, THX por la rápida respuesta. require_once funciona bien, no había pensado en eso. Sin embargo, la antigua sintaxis App :: import ("Proveedor", ...) no funciona para mí. –

+2

Por cierto, el antiguo uso de App :: import() como se muestra no funcionará, porque debe proporcionar la ruta relativa a la clase. import() ya no buscará en los directorios recursivamente por motivos de rendimiento. He oído informes al respecto, pero no se han abierto tickets en el rastreador de problemas. Sin embargo, las pruebas unitarias para esa característica están pasando como se esperaba. Trataré de escribir un ejemplo del mundo real para realmente validar que funciona como se espera. ¡Gracias! –

+4

Así que App :: import ("Proveedor", "Facebook/Facebook") debería hacer el truco en su caso. – mark

0

documentación de la torta de sugerir el uso de la aplicación :: usos() including-files-with-app-import

Sin embargo, también indica si tiene un plugin no stanard utilizar App :: import()

App::import('Vendor', 'phpQuery', array('file' => 'bariew/phpquery/phpQuery/phpQuery.php')); 
0

usted asume 'r archivo de proveedor ubicado /app/vendors/facebook/facebook.php aquí.

La siguiente línea debería hacer lo mismo como App :: import() en la versión anterior de CakePHP

require_once(ROOT . DS . 'app' . DS .'Vendor' . DS . 'facebook' . DS . 'src' . DS . 'facebook.php'); 

$facebookApi = new facebook();