web-dev-qa-db-fra.com

Comment importer des fichiers de fournisseurs dans CakePHP 3x

Je travaille avec CakePHP 3 (beta 2) version récemment lancée. J'ai besoin d'intégrer Facebook Login à l'aide de PHP SDK et je ne comprends pas bien importer des fichiers de fournisseur dans cette version. 
Dans CakePHP 2x, j'avais utilisé 

App::import('Vendor', 'Facebook', array('file' => 'Facebook' . DS . 'src'. DS. 'facebook.php'));

J'ai donc besoin de reproduire la même chose dans CakePHP 3x (je n'utilise pas de composeur).
Toute référence pour cela?

14
G.J

Eh bien, vous devrez le charger vous-même si compositeur n'est pas une option. Vous pouvez toujours utiliser la méthode de base require et créer vous-même une nouvelle instance de la classe de fournisseur. Référence: http://book.cakephp.org/3.0/fr/core-libraries/app.html#loading-vendor-files

Utilisation:

 //The following line should do the same like App::import() in the older version of cakePHP
 require_once(ROOT . 'vendor' . DS  . 'Facebook' . DS . 'src' . DS . 'facebook.php');

 $facebookApi = new facebook();
19
Ayman Bedair

la réponse fournie par Ayman B. ne semble pas faire le travail comme prévu dans la question après l'avoir essayé moi-même, pour les raisons suivantes: 

  • le dossier du vendeur dans cakephp3 ne se trouve pas dans le dossier src sous l'espace de noms APP, il est déplacé vers le dossier ROOT. En faisant cela, vous ne pourrez pas charger votre classe Facebook comme prévu, essayez vous-même et vous verrez le résultat ... 
  • En chargeant un fichier de fournisseur, cela ne charge pas automatiquement le nom de la classe, si votre bibliothèque de fournisseur ne suit pas la règle suivante en tant que règle PSR-0: \VENDOR\PACKAGE\TEST.CLASS.PHP et dans le test. class.php Aucune définition de classe ne doit être appelée ou importée dans votre script avec un mot clé d'espace de nom défini au début de ce script, comme suit: espace de nom le code ci-dessus ne fonctionnera pas 

Pour corriger la réponse, procédez comme suit:

1 - Définissez dans bootstrap.php une nouvelle constante cakephp telle que: Define ('VENDOR', ROOT. DS. 'Vendor' .DS); comme VENDOR constante est supprimée dans cakephp 3.x, vous pouvez le définir vous-même 2 - Ensuite, vous devez spécifier le nom du fournisseur, le nom du package et le nom de la classe dans une constante du fournisseur telle que: define (' _ ',; et alors vous pouvez faire $ facebookApi = new \\ (); 

cela fonctionnera pour vous comme prévu dans la question 

Si vous avez des problèmes, essayez de revenir à moi, je vais vous montrer un exemple d'utilisation comme décrit ici ...

2
Shabasha

J'ai également eu le même problème avec CakePHP 3.0. 

Effectuez l'installation en suivant les instructions à l'aide de Composer.

Ensuite, vous devez charger correctement le plug-in dans votre contrôleur avec l'instruction use. Comme ça:

utilise Ghunti\HighchartsPHP\Highchart;

  • Si vous utilisez le plug-in dans la plupart des pages, au lieu de charger dans chaque contrôleur, vous pouvez ajouter la même ligne dans votre fichier bootstrap.php, juste en dessous des autres instructions d'utilisation.

Cela résoudra le problème d'utilisation du plugin.

1
DecoMartins

Depuis CakePhp 3.x, la norme de code recommandée consiste à utiliser require_once sans les crochets "()".

require_once (ROOT.'Folder'.DIRECTORY_SEPARATOR.'requiredfile.ph '); 

devient

require_once ROOT.'Folder'.DIRECTORY_SEPARATOR.'requiredfile.ph ';

https://book.cakephp.org/3.0/en/contributing/cakephp-coding-conventions.html

J'espère que cela aidera quelqu'un dans le futur.

0
jilord2