php cakephp cakephp-2.0

Cargando archivos de proveedores en CakePHP 2.0



cakephp-2.0 (3)

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.

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

Intenté muchas formas diferentes de incluir el archivo ahora en CakePHP 2.0 de acuerdo con el nombre de archivo y la carga de clases que se describen aquí: Nombrar archivos y cargar cargas en clase en CakePHP 2.0

Cambié el nombre de la ruta a la app/Vendor/Facebook/Facebook.php , o a la app/Vendor/Facebook/facebook.php , y traté de seguir los 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 disparan un error / advertencia, por lo que es un poco molesto depurar esto ...


Asuma que su archivo de proveedor está ubicado /app/vendors/facebook/facebook.php aquí.

La siguiente línea debería hacer lo mismo que 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();


La documentación de Cake sugiere utilizar App :: uses () including-files-with-app-import

Sin embargo, también indica si tienes un complemento no estándar para usar App :: Import ()

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


Los vendedores 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 asignación de nombres de carpetas y archivos. Aún puede usar App::import(''Vendor'', ...) como lo hizo en la versión 1.3 del framework.

Ahora, usar App::import() para vendedores es algo tonto, si lo piensas bien. Es solo un contenedor costoso, prolijo y muy tonto 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 APP . ''Vendor'' . DS APP . ''Vendor'' . DS .