IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

faire tourner en local un projet qui marche en ligne (utilisation de composer)


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut faire tourner en local un projet qui marche en ligne (utilisation de composer)
    Bonjour,

    je compte ajouter une fonctionnalité à un projet déjà en ligne : https://pasdpanique.fr/. Je compte faire la mise au point en local et ne publier que quand ça sera opérationnel en local.
    Si je crée une discussion, c'est que j'ai un problème. Voici ma démarche :
    1- copie du projet en ligne sur le serveur local et test : OK.
    2- je remplace l'autoloader de composer par l'autoloader de rawsrc dans index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //require DIR_ROOT . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; //autoload de composer
    require DIR_ROOT . 'config' . DIRECTORY_SEPARATOR . 'autoload.php'; //autoload de rawsrc
    3- je supprime le répertoire "vendor"
    4- ayant besoin d'une librairie supplémentaire, je compte utiliser composer. J'ai donc besoin d'un fichier composer.json. J'en récupère un correct et le modifie :
    Code json : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    {
      "name": "schmitt/arnaud",
      "description": "",
      "type": "project",
      "license": "MIT",
      "authors": [
        {
          "name": "Laurent Schmitt",
          "email": "adresse-mail@gmail.com"
        }
      ],
      "keywords": [
        "php"
      ],
      "minimum-stability": "dev",
      "require": {
        "php": ">=8.0",
        "rawsrc/phpecho": "dev-master",
        "rawsrc/pdoplusplus": "dev-master"
    5- composer update. Cela recrée le répertoire "vendor" et installe les 2 librairies requises (PHPEcho et PDOPlusPlus)
    6- mais :
    Fatal error: Uncaught Error: Class "PasDePanique\controller\Accueil" not found in C:\projets\arnaudpoo\index.php:35 Stack trace: #0 {main} thrown in C:\projets\arnaudpoo\index.php on line 35
    Même chose si je remets l'autoloader de composer :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    require DIR_ROOT . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; //autoload de composer
    //require DIR_ROOT . 'config' . DIRECTORY_SEPARATOR . 'autoload.php'; //autoload de rawsrc

    Comment puis-je m'en sortir ?

  2. #2
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Pourquoi diable veux-tu supprimer ton autoloader (ton point 2 et suivant)? Ne fais surtout pas ça.

    Cela étant je n'ai pas compris ce que tu cherches à faire. Si c'est ajouter une nouvelle librairie (dépendance) c'est juste un "composer require xxxx" avec le nom de ta nouvelle dépendance, comme tu l'auras lu dans la documentation de celle-ci.

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    Pourquoi diable veux-tu supprimer ton autoloader (ton point 2 et suivant)? Ne fais surtout pas ça.
    C'était juste pour essayer mais j'ai aussi fait un essai avec l'autoloader de composer.

    Cela étant, j'ai recommencé en essayant de suivre ce que tu dis :

    1- copie sur le serveur local du projet en ligne : OK

    2- je garde l'autoloader de composer :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    require DIR_ROOT . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; //autoload de composer
    //require DIR_ROOT . 'config' . DIRECTORY_SEPARATOR . 'autoload.php'; //autoload de rawsrc

    3- je supprime le répertoire vendor pour bien repartir de 0.

    4- je lance les 2 commandes pour installer les librairies :
    composer require rawsrc/phpecho et composer require rawsrc/pdoplusplus.

    5- je recharge et reteste le projet local : même message d'erreur :
    Fatal error: Uncaught Error: Class "PasDePanique\controller\Accueil" not found in C:\projets\arnaudpoo\index.php:35 Stack trace: #0 {main} thrown in C:\projets\arnaudpoo\index.php on line 35
    Pourtant, la classe existe bien class Accueil, avec l'espace de nom : namespace PasDePanique\controller;.

    Qu'est-ce qui ne va pas ?

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Comme le problème est encore là, je fais un nouvel essai :

    Etapes 1, 2 et 3, comme au post précédent

    4- test du projet tel quel :
    require(C:\projets\arnaudpoo\vendor\autoload.php): Failed to open stream: No such file or directory in C:\projets\arnaudpoo\index.php on line 10
    ce qui est normal

    5- une seule des 2 librairies étant utilisée par le projet courant, je ne charge que cette dépendance : composer require rawsrc/phpecho.

    6- je reteste le projet et de nouveau le message d'erreur :
    Fatal error: Uncaught Error: Class "PasDePanique\controller\Accueil" not found in C:\projets\arnaudpoo\index.php:35 Stack trace: #0 {main} thrown in C:\projets\arnaudpoo\index.php on line 35
    Voici ce contrôleur :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php declare(strict_types=1);
     
    namespace PasDePanique\controller;
     
    class Accueil
    {
        public function invoke(array $url_data = []): void
        {
            $page = new \PasDePanique\view\page\Accueil();
     
            echo $page->build();
        }
    }

    Et comme il instancie une classe dans view\page, la voici :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php declare(strict_types=1);
     
    namespace PasDePanique\view\page;
     
    use PasDePanique\model\ZonesIntervention;
    use rawsrc\PhpEcho\PhpEcho;
    use rawsrc\PhpEcho\ViewBuilder;
     
    class Accueil
        extends ViewBuilder
    {
        /**
         * @return PhpEcho
         */
        public function build(): PhpEcho
        {
            $layout = new PhpEcho('Layout.php');
            $layout['title'] = 'Désinsectisation de nids de guêpes et de frelons';
            $layout['body'] = [
                new PhpEcho('block/a.propos.php'),
                new PhpEcho('block/zones.interventions.php', ['zones' => ZonesIntervention::getDataForWeb()]),
                new PhpEcho('block/boutons.contact.php'),
            ];
     
            return $layout;
        }
    }

    Les 3 classes appelées par des use sont bien présentes. D'où peut venir le problème ?

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Problème résolu

    composer.json :
    Code json : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
        "require": {
            "rawsrc/phpecho": "^5.4"
        },
        "autoload": {
            "psr-4": {
                "PasDePanique\\": "src/"
            }
        }
    }
    donc ajout de la section autoload et ensuite composer update.
    Fallait y penser !

  6. #6
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Si on reprends ton post initial : tu récupères ton projet du site online vers ton ordinateur, tu peux ignorer de copier le dossier vendor puisqu'il sera totalement recréé.

    La seule et unique chose à faire après la copie est de lancer un composer update et rien de plus.

    (tu admettras que si tu supprimes ton fichier composer.json pour le remplacer par un autre, tu perds ton propre namespace, cela ne peut donc pas fonctionner)

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Oui pour composer update, par contre je n'avais plus de composer.json correct....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Projet qui marche sous Tomcat 7 et pas sous JBoss 7
    Par PhilippeGibault dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 16/03/2012, 10h49
  2. Regexp qui marche en ligne mais pas en local
    Par akrogames dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/04/2010, 16h30
  3. Réponses: 3
    Dernier message: 25/09/2009, 11h48
  4. projet qui marche en mode "hosted" mais pas sous Tomcat
    Par sdesbure dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 02/02/2009, 23h54
  5. Projet qui marche sous Eclipse ne marche plus en JAR
    Par leminipouce dans le forum Eclipse Java
    Réponses: 7
    Dernier message: 26/10/2005, 18h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo