8
votes

Ajout d'un fournisseur personnalisé Lib à Symfony2 AutoLoad

J'ai essayé cela pendant des heures maintenant - et je n'arrive pas à trouver des messages qui fonctionnent. J'ajoute des classes PHP personnalisées au répertoire de vendeur Symfony2.

Par exemple (copié une autre structure de fournisseur) em>: p>

Vendeur / MyLib / MyLib / SRC / MYLIB / LIB / CLASS.PHP STRT> EM> P>

I Mise à jour du compositeur root.json en ajoutant: P>

use MyLib\Lib\ClassName as ClassName;
class Cms extends ClassName
{}


2 commentaires

Avez-vous exécuté Compositeur Dump-AutoLoad Après avoir ajouté votre bibliothèque à Composer.json?


Vient d'essayer ça et c'est toujours me donner la même erreur :(


4 Réponses :


4
votes

dans les classes PHP sont automédés via __autoload

symfony prend Entièrement en soin, c'est chargeur de classe mais cela fonctionne en fait de la même manière. Il n'y a pas de balayage de fond de tous les répertoires, vous devez donc ajouter votre espace de noms manuellement.

Vous devez ajouter dans votre fichier autoload.php: xxx


3 commentaires

J'obtiens toujours l'erreur après avoir ajouté le ci-dessous à l'application / autoload.php - $ loader-> Ajouter (MyLib ',' / .. / Vendeur / MyLib / MyLIB / SRC / MYLIB / LIB ') ;


OK - son travail maintenant. Avec: $ loader-> Ajouter (MyLib \ Lib ', RealPath ( DIR .' / .. / Vendeur / MyLib / MyLib / SRC ')); .. Était une path typo .. merci beaucoup :)


Vous voudrez peut-être ajouter le troisième drapeau booléen true si vous souhaitez ajouter votre espace de noms à la liste existante créée par compositeur.



10
votes

Vous devez vraiment utiliser des conteneurs de service qui est fondamentalement le moyen de symfony de charger des classes.

Voici pourquoi: p>

  1. nommément un service n'est jamais construit tant que nécessaire. Li>
  2. Meilleure pratique pour la réutilisation du code. LI>
  3. séparant chaque morceau de fonctionnalité dans votre application. LI>
  4. Puisque chaque service ne fait qu'un seul travail, vous pouvez facilement accéder à chaque Service et utilisez sa fonctionnalité où que vous en ayez besoin. LI>
  5. Chaque service peut également être plus facilement testé et configuré depuis Il est séparé de l'autre fonctionnalité de votre application. Li>
  6. Cette idée s'appelle une architecture axée sur le service et n'est pas unique à symfony ou même php. li> ol>

    http://symfony.com/doc/current/book/service_container.htmlled/ A> P>

    init
    


1 commentaires

Je vote cette réponse parce que c'est l'explication la plus rapide et la plus compréhensible sur la mise en place facilement d'un service que j'ai lu jusqu'à ce jour. Merci, ça a beaucoup aidé.



0
votes

Si l'on utilise un autre projet qui utilise AutoLoader pour charger ses classes, par exemple Simplesaml, et souhaitez l'utiliser en classe dans un autre espace de noms:

namespace Study\UserBundle\Service;

require_once "/full_path/simplesaml/lib/_autoload.php";


use SimpleSAML_Configuration;
use SimpleSAML_Auth_Simple;
use SimpleSAML_Auth_State;

class SimpleSAMLLogin {


0 commentaires

0
votes

La dernière réponse est correcte: https://stackoverflow.com/a/27768442/2400373

Je travaille pour moi cependant est important. Ajouter que cela est correct mais si vous aviez avant d'installer la bibliothèque en autoload. Dans mon cas dans Symfony 3.2.x j'ai ajouté ma bibliothèque en compositeur.json: xxx

et après cette instruction: xxx < p> alors tout va bien.

considère


2 commentaires

"La dernière réponse" peut changer ou être supprimé. Vous devriez inclure le lien de partage. (Aussi, pas tout à fait sûr de ce que vous dites)


Merci, j'ajoute maintenant le lien