Class personnel

Par kjebbour, il y a 11 ans


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.

9 réponses

JC_Pires, il y a 11 ans

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

kjebbour, il y a 11 ans

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.

JC_Pires, il y a 11 ans

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
kjebbour, il y a 11 ans

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
JC_Pires, il y a 11 ans

Tu as fais un:

composer dumpautoload

pour recharger l'autoloader?

Xeta, il y a 11 ans

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)
JC_Pires, il y a 11 ans

Oui j'y ai pensé lorsque je t'avais dis de rajouter le use. Xeta à raison il vaudrais mieux garder cette nomenclature

kjebbour, il y a 11 ans

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 ).

JC_Pires, il y a 11 ans

Ce qui est cool, c'est qu'on a pus te montrer 2 méthodes differentes, bonne journée à toi.