J'ai besoin de quelques petits renseignements sur l'inclusion des bibliothèques externes, à savoir phpCAS disponible à cette adresse, malgré que Winzou en parle dans son tuto dans cette partie...
En effet, il dit que c'est possible en respectant la norme PSR-0
Je crois que ce bundle ne le respecte pas, alors j'ai essayé un milkshake avec un autre tuto.
en respectant la convention apportée dans le 2eme tuto.
J'ai créé un dossier src dans lequel je mets toute ma librairie et un fichier PhpCas.php dans vendor/phpcas/lib/PhpCas.
Dans mon fichier PhpCas.php j'ai mis le code suivant en mettant un namespace qui je pensais serait respectueux de psr-0
<?php
namespace Phpcas;
require_once __DIR__.'/src/CAS.php';
class PhpCas_PhpCas extends phpCAS{
}
Puis dans mon controller, j'ai mis un use Phpcas\PhpCas_PhpCas; et à l'appel de new PhpCas_PhpCas(); ça me dit que ça n'existe pas...
Fatal error: Class 'Phpcas\PhpCas_PhpCas' not found in C:\wamp\www\*****\src\*****\*****Bundle\Controller\AccueilController.php on line 37
Quelqu'un aurait la méthode à suivre dans mon cas ? Au moins une indication pour avoir un namespace qui me permette de faire appel à cette bibliothèque ? Si je dois structurer mes dossiers autrement ?
Merci
- Edité par KenshiWado 27 juin 2013 à 10:34:12
Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
Je ne saurais que trop te conseiller de cet article de la FAQ. Fais bien attention à ne pas mélanger les indications pour les versions différentes de Symfony, et du coup faire attention aux versions pour lesquelles les tutoriels ailleurs qu'ici sont prévus.
D'après ce que j'ai pu voir, tu pourrais utiliser Composer pour cette librairie. Tout du moins, phpCAS possède un fichier composer.json, donc j'extrapole volontiers sur le fait qu'il doit y avoir un moyen d'importer le code avec ce gestionnaire de dépendances.
Edit
En fait, tu as mélangé deux choses.
Si tu utilises composer, tu n'as pas besoin de recréer de fichier PhpCas_PhpCas, la librairie devrait être utilisable telle-quelle. De plus, tu ajoutes une composante PEAR en mettant le sous-tiret dans le nom. Hors, il faut oublier les conventions PEAR.
Il n'y a pas de namespaces, mais il y a un autoloader, je pense que cela te permet de pouvoir utiliser les noms de classes à la mode PEAR et la librairie se charge de traduire.
Si tu déclarais le service sur le fichier CAS_autoload.php directement ?
C'est un cas intéressant, si on trouve comment faire, j'ajouterai la solution à la FAQ (je vais y éditer mon message pour regrouper les solutions, c'est plus simple que quelqu'un la mette dans un autre message et qu'il y en ait plus d'un à lire)
Alors là je vais passer pour un gros boulet, mais je crois qu'il faut que tu me guides :/
Moi dans mon dossier src j'ai exactement ce que tu vois dans le dossier source sur gitHub
Il faut que je crée un fichier CAS_autoload.php ou tu parles du fichier que tu m'as mis en lien ?
Je ne comprends pas comment déclarer un service là-dedans alors qu'en principe c'est du yaml...
Je suis vraiment désolé et je te remercie pour ta patience mais pour faire le lien, et surtout les notions de PEAR, c'est un gros mystère pour moi... :s
Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
Je n'ai pas vraiment le temps de regarder ça en détail avant demain, mais il est possible qu'il faille quand-même redéfinir un fichier, je te redis d'ici dimanche (j'ai un samedi chargé en perspective )
Actuellement j'ai essayé de passer par le fichier autoload plutôt que par le composer mais ça me ressort toujours le message d'erreur sur le appDevDebugProjectContainer.php.
J'ai aussi déclaré mon service dans app/config/config.yml mais rien n'y fait...
Peut-être que je me suis planté dans le namespace, je ne sais pas... Actuellement c'est Cas\PhpCas et mon architecture c'est vendor/Cas/lib/PhpCas
J'ai cherché mon message d'erreur sur google et d'autres l'ont aussi mais personne ne leur apporte de réponse -_-. Juste un à qui on lui a dit de faire un import de son service dans app/config/config.yml mais vu que j'ai mis le service direct dedans, je me dis que ce ne doit pas être ça :/
Plutôt chiant ce problème...
Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
Ton fichier PhpCas.php est au final presque juste, il faut normalement simplement enlever le "nom doublé", donc passer dePhpCas_PhpCas à simplement PhpCas. Après, tu peux regarder la FAQ (j'insiste sur ce qu'il faille faire attention à la version de Symfony) et adapter depuis l'exemple pour HTML2PDF
J'ai déjà essayé comme tu dis, et j'ai les erreurs que je t'ai cité dans mes messages ci-dessus.
Aussi j'ai remarqué que les classes de la librairie, à part la classe principale qui se nom phpCAS, sont préfixées par CAS_... C'est typique de PEAR ça, non ?
Du coup je me dis qu'il y a peut-être un moyen différent d'inclure cette librairie dans mon projet...
J'ai lu que qu'on peut mettre des librairies respectant les conventions PEAR sans namespace, mais sans vraiment plus de détail ni aucun exemple pour m'aiguiller :/
Comment je devrais procéder avec ce phpCAS ?
Merci
Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
Quand tu utilises la librairie "normalement", tu n'inclus que phpCAS, qui se débrouille pour charger les autres classes. Donc c'est bien la classe qui est dans ce fichier CAS.php qu'il faut étendre, ça, cela me paraît clair.
Si tu as toujours exactement le même message d'erreur, tu n'as pas encore enlevé le double nom…
La déclaration du service dans app/config/config.yml
services:
phpcas:
class: Cas\PhpCas
Et juste un $cas = $this->get('phpcas'); dans un controller...
Et toujours cette erreur:
Fatal error: Class 'Cas\PhpCas' not found in C:\wamp\www\*******\app\cache\dev\appDevDebugProjectContainer.php on line 1776
Alors que j'ai fais un composer.phar update et un app/console cache:clear...
Voilà, c'est tous les changements que j'ai fais pour mettre en place cette librairie...
Est-ce que si tu as 10 minutes devant toi, si tu peux essayer de mettre ces éléments dans un de tes projets sf2, si tu peux regarder si tu as le même problème que moi, si ça ne t'embête pas trop
J'ai vraiment besoin que ça marche, il n'y a pas d'autre solution :/
Merci.
- Edité par KenshiWado 29 juin 2013 à 19:10:38
Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
Oui, effectivement, ça ne fonctionne pas comme je m'y attendais… Il semble que le namespace ne soit pas renseigné comme il le faudrait…
Je bûche, je te redis
Edit
J'ai réussi à résoudre ce problème, mais j'ai de la peine à comprendre comment il faut renseigner Composer pour qu'il génère son autoload correctement. Je vais manger, je reviens expliquer ce que j'ai fait après.
Mon fichier créé est consititué de ce code (enregistré dans /vendor/phpcas/lib/PhpCas/PhpCas.php)
<?php
namespace PhpCas;
require_once 'src/CAS.php';
class PhpCAS extends \phpCAS
{}
</pre>
Donc je suis allé regarder comment était structuré le fichier PHP généré par Composer (dans vendor/composer/autoload_namespace.php), et j'ai vu que, si je renseignais mon composer.json avec
Or, toutes les autres lignes qui permettent de définir des namespaces pour les vendors sont du même style, mais avec $vendorDir avant le chemin. J'ai donc modifié à la main autoload_namespaces.php pour ça :
Attention, ce fichier est modifié à chaque manipulation de Composer, donc tu risque très fort de perdre cette modification si elle n'a pas été faite par Composer
Montre-moi à nouveau ta hiérarchie (si elle a changé) ainsi que le contenu du fichier que tu as créé pour utilser la librairie (s'il a changé aussi), s'il te plaît.
Il se fait tard (presque tôt !? ), il est possible que si je ne vois pas tout de suite la solution, je ne te réponde que demain.
Encore une chose : je t'ai donné le lien vers Packagist, ils y expliquent ce qu'il faut utiliser pour télécharger phpCAS avec Composer, et après quoi – si tu fais avec Composer, encore une fois – tu ne devrais plus avoir de problème que pour déclarer le service. Tiens, montre-moi aussi ce fichier, si tu l'as changé.
J'ai exactement la config suivante de ce fichier et le ficher autoload_namespaces avait déjà la variable $vendorDir... Je n'ai rien modififé à la main, c'est composer qui a tout fait. Mais toujours le même message d'erreur, que je mette le service dans le dossier config de app ou dans le dossier config des ressources de mon bundle...
G-rem a écrit:
Bin pourtant ça m'a l'air irréprochable...
Mon fichier vendor/Cas/lib/PhpCas/PhpCas.php
<?php
namespace Cas;
require_once__DIR__.'/src/CAS.php';
class PhpCas extends phpCAS{
}
La déclaration du service dans app/config/config.yml
services:
phpcas:
class: Cas\PhpCas
Et juste un $cas = $this->get('phpcas'); dans un controller...
Et toujours cette erreur:
Fatal error: Class 'Cas\PhpCas' not found in C:\wamp\www\*******\app\cache\dev\appDevDebugProjectContainer.php on line 1776
Alors que j'ai fais un composer.phar update et un app/console cache:clear...
Voilà, c'est tous les changements que j'ai fais pour mettre en place cette librairie...
Est-ce que si tu as 10 minutes devant toi, si tu peux essayer de mettre ces éléments dans un de tes projets sf2, si tu peux regarder si tu as le même problème que moi, si ça ne t'embête pas trop
J'ai vraiment besoin que ça marche, il n'y a pas d'autre solution :/
Merci.
- Edité par G-rem il y a environ 4 heures
Désolé de te faire travailler le samedi soir
- Edité par KenshiWado 29 juin 2013 à 23:21:09
Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
Il y a le lib/ PhpCas de trop dans ce que tu as ajouté dans autoloader_namespaces.php
G-rem a écrit:
Désolé de te faire travailler le samedi soir
Bientôt, ce sera dimanche matin, donc on aura un facteur 1.5 pour les heures (à partir de 7 heures), mais depuis 22h30, on est au tarif de nuit, facteur 2.5. Tu peux te le permettre ?
Par contre j'ai encore un statut étudiant jusqu'à septembre ? Tu fais des tarifs spéciaux ?
Mon dossier c'est vendor/cas/lib/PhpCas, c'est normal qu'il y ai lib, non ?
PS: J'ai retiré le require de phpCas hein, j'utilise l'ancienne méthode car le bundle n'utilisais aucun namespace et ça ne me générait rien dans autoload_namespace...
- Edité par KenshiWado 29 juin 2013 à 23:43:51
Entraidons-nous sur un site inachevé, c'est tellement mieux ! | JSDZ@Toulouse
Ah, j'ai loupé ça : le PhpCas de trop vient de composer.json, justement. Il ne le faut pas, que ce soit dans composer.json (parce que là, c'est toi qui l'y a mis, et qu'il se trouve dans la section autoload['psr-0']) ou dans autoload_namespaces.php (où il s'y trouve parce que tu l'avais mis dans composer.json)
En fait, regarde ce que j'ai mis plus haut, c'est ce qu'il te faut, en sachant que j'ai presque les mêmes dossiers que toi (celui que tu as appelé cas s'appelle phpcas, sans majuscule, chez moi)
G-rem a écrit:
Par contre j'ai encore un statut étudiant jusqu'à septembre ? Tu fais des tarifs spéciaux ?
Je peux mettre les facteurs que je veux, Zér0 fois quelque chose, c'est toujours nul
Et voilà, je suis fatigué, je ris tout seul devant mon écran de mon jeu de mot ma blague lamentable…
Bonjour, je me permet de réveiller ce post car je suis confronté au même problème, mais que contrairement à vous je n'ai toujours pas la solution :s . Je suis quelqu'un qui n'a pas peur de cherche une solution pendant plusieurs jours mais la, je sature, l'erreur est tellement explicite (ou pas) que j'avance à l'aveugle et c'est frustrant grrr...
Tout d'abord j'ai remarqué que le namespace doit etre de type "exemple\\html" et non pas "exemple\html" pour etre de type json, sinon la compilation n'est pas autorisé.
Je me suis inspiré de la manipulation suivante vu que j'ai sf2.2 mais la librairie n'est toujours pas trouvé. Sinon pour info l'arborescence est identique à celle de G-rem et le namespace dans ma classe est "neo10Complement\Html2Pdf".
Si vous pouviez me donner un petit coup de pouce ca serait type top
Pourrais-tu nousfournir le contenu de vendor/composer/autoload_namespaces.php, s'il te plaît ? (Je ne suis plus certain du chemin, mais le nom du fichier est correct)
Et voici l’arborescence avec la librairie html2pdf qui se situe dans src
J'ai une question, temps que je t'ai sous la main, les librairie que l'on déclare dans vendor sont t-ils uniquement appelable par $this->container .... ?? (la question est peut on déclarerer en haut du controller "use neo10Complement\html.." ?? )
edit: pour info mon erreur est:
Error: Class 'Html2Pdf' not found in C:\wamp\www\neo10\src\neo10\PublicBundle\Controller\CommandeController.php line 123
Elle est plus que explicite mais pas moyen de trouver mon erreur
[Symfony2]Inclure une bibliothèque externe(phpCAS)
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
et je declare mon service de cette maniere: