Bonjour,
je travail avec cakephp 3 et j'ai créé une classe personnel ou j'ai mis des fonctions que je vais utilisé tout au long de l'application, j'ai mis la clases dans un dossier Lib dans src, mais je sais pas comment charger cette classe, avec cakephp 2 c'etait facile
App::import('Lib', 'Dbfconsole');
Mais avec cakephp 3 j'avoue que je suis perdu.
merci pour votre aide.
Ce que tu peut faire, c'est la mettre dans ton dossier Vendor, et la charger avec composer.
Tu lui mets un Namespace, et le tour est joué, l'exemple ici traite d'une classe qui est nommée "TSStatus" que j'ai mis dans l'autoload de composer:
{
"name": "cakephp/app",
"description": "CakePHP skeleton app",
"homepage": "http://cakephp.org",
"type": "project",
"license": "MIT",
"require": {
"php": ">=5.4.16",
"cakephp/cakephp": "~3.0",
"mobiledetect/mobiledetectlib": "2.*",
"cakephp/migrations": "@stable"
"cakephp/plugin-installer": "*"
},
"require-dev": {
"psy/psysh": "@stable",
"cakephp/debug_kit": "~3.0",
"cakephp/bake": "~1.0"
},
"suggest": {
"phpunit/phpunit": "Allows automated tests to be run without system-wide install.",
"cakephp/cakephp-codesniffer": "Allows to check the code against the coding standards used in CakePHP."
},
"autoload": {
"psr-4": {
"App\\": "src",
"TSStatus\\": "vendor/tsviewer" // ICI ma classe perso
}
},
"autoload-dev": {
"psr-4": {
"App\\Test\\": "tests",
"Cake\\Test\\": "./vendor/cakephp/cakephp/tests"
}
},
"scripts": {
"post-install-cmd": "App\\Console\\Installer::postInstall",
"post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump"
},
"minimum-stability": "dev",
"prefer-stable": true
}
Une fois fais, un petit composer dumpautoload et hop c'est fait
N'oublie pas de mettre un use en début de ton fichier "Controller/Model" exemple pour ma Classe TSStatus dont j'ai besoin dans mon AppController:
<?php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
use TSStatus\TSStatus; // <= ICI le use
Hello,
Le dossier vendor est plus réservés au librairies installées avec composer, pour des fichiers simples, utilise le dossier src :
src/
Lib/
Dbfconsole.php
Pour l'utiliser :
use App\Lib\Dbfconsole;
Dbfconsole::encode($id)
Oui j'y ai pensé lorsque je t'avais dis de rajouter le use. Xeta à raison il vaudrais mieux garder cette nomenclature
Merci Jean-christophe Pires pour ta réponse rapide,
j'ai fais la meme chose en ajoutant ma classe Dbfconsole dans vendor, m'ai quand j'essai d'appeler une fonction de cette classe dans mon view
Dbfconsole::encode()
ca me génére une erreur
Error: Class 'Dbfconsole' not found
merci pour vos réponses.
Merci Jean-christophe Pires,
Voila comment j'ai procédé:
j'ai créé un dossier dbfconsole dans vendor, j'ai y mis ma classe
namespace Dbfconsole;
class Dbfconsole
{
static $encodehash = '2965';
public function encode($value) {
if (empty($value)){
return "";
}
return Security::encrypt($value, $encodehash);
}
public function decode($code) {
if (empty($code)){
return "";
}
return Security::decrypt($code, $encodehash);
}
}
dans le composer j'ai mis:
"autoload": {
"psr-4": {
"App\\": "src",
"Dbfconsole\\": "vendor/dbfconsole"
}
},
et dans mon AppController j'ai ajouter:
use Dbfconsole\Dbfconsole;
dans mon view j'ai appelé la fonction encode:
Dbfconsole::encode($id)
mais j'ai toujours cette erreur:
Error: Class 'Dbfconsole' not found
Re-Bonjour,
super !! ça marche now. Je vous remercie vivement pour vos réponses et pour le temps que vous avez consacré à mon problème, je vous souhaite une excellente journée (Jean-christophe Pires, Xeta ).