L'ajout d'un personnalisé vendeur lib pour Symfony2 autoload
J'ai essayé ce depuis des heures maintenant et je n'arrive pas à trouver tous les messages que le travail.
Je suis l'ajout de classes php pour la Symfony2 répertoire des vendeurs.
Par exemple (copié d'un autre fournisseur structure):
vendor/mylib/mylib/src/Mylib/Lib/Class.php
J'ai ensuite mis à jour à la racine de compositeur.json en ajoutant:
"require": {
"mylib/mylib": "@dev"
},
J'ai également créé un compositeur.json vendor/mylib/mylib, qui contenait:
{
"name": "mylib/mylib",
"type": "library",
"description": "My Libraty",
"keywords": ["library"],
"autoload": {
"psr-0": { "Mylib\\": "src/" }
},
"minimum-stability": "dev"
}
J'ai ajouté un espace de noms dans Class.php:
namespace MyLib\Lib;
Dans un de mes bundles j'ai ajouté ci-dessous:
use MyLib\Lib\ClassName as ClassName;
class Cms extends ClassName
{}
L'erreur que je reçois est:
FatalErrorException: Error: Class 'MyLib\Lib\Maclasse' ne trouve pas dans
C:\xampp\htdocs\My_CMS\src\Cms\CmsBundle\Entity\Cms.php ligne 13
Ce que je fais mal?
composer dump-autoload
après l'ajout de votre lib de compositeur.json?Juste essayé et sa encore de me donner la même erreur 🙁
OriginalL'auteur Green Acorn | 2013-08-25
Vous devez vous connecter pour publier un commentaire.
En php, les classes sont chargées automatiquement via __autoload
Symfony prend soin à ce sujet dans son Chargeur De Classe mais en fait, il fonctionne de la même manière. Il n'y a pas de fond scrutant tous les répertoires, de sorte que vous devez ajouter votre espace de noms manuellement.
Vous devez ajouter dans votre autoload.php fichier:
$loader->add('MyLib','/../vendor/mylib/mylib/src/MyLib/Lib');
OK Sa fonctionne maintenant. Avec: $loader->add('MyLib\Lib', realpath(DIR.'/../vendeur/mylib/mylib/src'));.. a Été un chemin de faute de frappe.. Merci beaucoup 🙂
Vous pouvez ajouter la troisième indicateur booléen
true
si vous voulez ajouter votre espace de noms à la liste existante créée par le compositeur.OriginalL'auteur takwlasnie
Vous devriez vraiment être en utilisant des conteneurs de service qui est fondamentalement la symfony façon de charger les classes.
Voici pourquoi:
service et utiliser ses fonctionnalités, partout où vous en avez besoin.
il est séparé des autres fonctionnalités de votre application.
pour Symfony ou encore PHP.
http://symfony.com/doc/current/book/service_container.html
Donc, fondamentalement, symfony va gérer l'instanciation de classes pour vous dans votre contrôleur. Tout ce que vous devez faire est la suivante:
Ajouter un dossier dans votre chemin appelé Bibliothèques --> src/AppBundle/Bibliothèques
Ajouter à la classe de ce dossier avec un espace de noms en haut.
Mon exemple est:
Puis ajouter un fichier appelé les services.yml de votre application.
app/config/services.yml
Mettre le code suivant dans il ne pas utiliser la tabulation dans le fichier yml
Puis ajouter le troisième ligne des ressources: services.yml de votre config.fichier yml.
En haut de votre contrôleur lors de l'utilisation il suffit d'ajouter la déclaration d'utilisation
Maintenant appeler votre code
echo est
OriginalL'auteur Jason
Si un ont un autre projet que l'utilisation de l'autochargeur de charger ses classes, par exemple SimpleSAML, et que vous voulez utiliser dans la classe dans un autre espace de noms:
OriginalL'auteur developer
La dernière réponse est correcte:
https://stackoverflow.com/a/27768442/2400373
Je travaille pour moi est cependant important d'ajouter que c'est correct, mais si vous 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:
Et après cette instruction:
Alors tout est bien.
Ce qui concerne
Merci, j'ajoute le lien
OriginalL'auteur juanitourquiza