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 ...
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
.
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();
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'));