web-dev-qa-db-fra.com

Chargement de fichiers fournisseurs dans CakePHP 2.0

Je suis en train de mettre à jour l'un de nos projets vers CakePHP 2.0. Malheureusement, la "première ligne" de code crée des problèmes et je ne trouve pas de solution à ce problème.

Dans CakePHP 1.3, j'avais une déclaration App::import("Vendor", "facebook"); juste avant que la classe AppController soit définie. Le fichier référencé se trouve sous /app/vendors/facebook/facebook.php (et comprend lui-même le fichier base_facebook.php).

J'ai essayé de nombreuses façons d'inclure le fichier maintenant dans CakePHP 2.0 en fonction de la dénomination de fichier et du chargement de classe décrite ici: Changements de nommage de fichier et de chargement de classe dans CakePHP 2.0

J'ai renommé le chemin en app/Vendor/Facebook/Facebook.php ou app/Vendor/Facebook/facebook.php et j'ai essayé les méthodes suivantes:

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

Quelqu'un a-t-il trouvé un moyen de référencer un fichier de fournisseur? En raison du chargement paresseux, les méthodes ci-dessus ne déclenchent pas d'erreur/avertissement, il est donc assez ennuyant de déboguer cette ...

34
Johannes N.

Les fournisseurs ne peuvent pas être chargés à l'aide de App::uses() dans CakePHP, car CakePHP ne peut pas s'attendre à ce que les bibliothèques externes respectent les mêmes normes en matière de nommage des dossiers et des fichiers. Vous pouvez toujours utiliser App::import('Vendor', ...) comme vous l'avez fait dans la version 1.3 du framework.

Maintenant, utiliser App::import() pour les vendeurs est un peu ridicule, si vous y réfléchissez. C’est juste un emballage coûteux, prolixe et très ridicule pour require_once().

Dans la version 2.0, nous encourageons les utilisateurs à utiliser require ou require_once pour leurs bibliothèques de fournisseurs. Vous pouvez obtenir l'emplacement du dossier Vendor à l'aide de App::path('Vendor') ou simplement APP . 'Vendor' . DS.

53

Supposons que votre fichier fournisseur se trouve à /app/vendors/facebook/facebook.php ici.

La ligne suivante devrait faire la même chose que App :: import () dans l'ancienne version de CakePHP

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

 $facebookApi = new facebook();
0
Faisal

La documentation de Cake suggère d'utiliser App :: uses () notamment-fichiers-avec-app-import

Cependant, il est également indiqué si vous avez un plugin non standard à utiliser App :: Import ()

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