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

MVC PHP Discussion :

_forward : ne passe pas par l'init du controller


Sujet :

MVC PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut _forward : ne passe pas par l'init du controller
    Bonjour

    Quand j'utilise redirect, la méthode init du controller est correctement appellé mais l'adresse est modifié dans la barre d'adresse ce que je ne souhaite pas.

    Si j'utilise forward, l'adresse n'est pas modifiée ce qui est parfait, par contre la methode init du controller n'est pas appellé ce qui me pose des problèmes.

    Comment forcer l'appel de la méthode init lors de l'utilisation du forward ?

    Merci d'avance

    Nathalie

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Je viens de tester, et après l'appel de _forward vers un autre contrôleur, la méthod init() de ce dernier est bien appelée...

    Tu es sûr de ne pas avoir un problème ailleurs ?

    Peux-tu nous montrer un code minimal qui reproduise ce problème ?

  3. #3
    Membre actif Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Points : 233
    Points
    233
    Par défaut
    C'est normal étant donné que la méthode forward est utilisée pour passer d'une action à une autre sans refaire tout le dispatch.

    La seule méthode que je vois (pas très propre mais bon) ce serait de mettre un flag dans ton init du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->initialise = true;
    Et dans l'action qui est appelée par le forward :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(empty($this->initialise))
    	$this->init();

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par Alshten Voir le message
    C'est normal étant donné que la méthode forward est utilisée pour passer d'une action à une autre sans refaire tout le dispatch.

    La seule méthode que je vois (pas très propre mais bon) ce serait de mettre un flag dans ton init du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->initialise = true;
    Et dans l'action qui est appelée par le forward :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(empty($this->initialise))
    	$this->init();
    Il ne me semble pas que ce soit normal (la méthode init comme son nom l'indique sert à initialiser un contrôleur, cette initialisation servant par la suite... un contrôleur non initialisé peut devenir inutilisable), et d'ailleurs je ne l'ai pas reproduit (logique, la méthode init() étant appelée à la fin du constructeur du contrôleur)...

  5. #5
    Membre actif Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Points : 233
    Points
    233
    Par défaut
    Ah oui en effet

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    Oui vous avez raison, en fait l'init est bien appellé (juste ce qui devait se faire dans l'init n'est pas fait comme je veux).


    Mais finalement j'ai modifié le fonctionnement de mon appli et maintenant ca marche comme je veux.

    Par contre y-a-til un moyen de modifier l'adresse dans la barre d'adresse de l'utilisateur ?


    Merci pour votre aide.

    Nat

  7. #7
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par boubil Voir le message
    Par contre y-a-til un moyen de modifier l'adresse dans la barre d'adresse de l'utilisateur ?
    Que veux-tu dire par là ? Aurais-tu un exemple ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 57
    Points
    57
    Par défaut
    En fait mon appli fonctionne essentiellement en ajax pour tous les affichages (je ne raffraichi que le coeur de page a chaque fois), sauf quand un formulaire est posté.
    Donc par exemple si je clique sur le bouton modifier, le formulaire de modification va être chargé en ajax par contre, la validation du formulaire se fait en http normal (post), l'action "modifier" dans mon controller fait la modif puis fait un redirect vers l'index du controller en question pour afficher la liste resulatante de la modif. Dans ce cas, la page est intégralement rechargée (comportemanet souhaité car j'ai des élements annexe de la page à raffraichir. Par contre l'URL dans la barre d'adresse devient /moncontroller/index alors que j'aurai préféré que ca reste moncontrollerParDefaut/index (ou sans /index d'ailleurs) comme dans le reste de l'appli. Du coup j'aurais bien aimé pouvoir post modifier l'adresse renvoyée par le serveur. Peut être puis-je le faire via apache ? Par contre chez l'hébergeur ca ne marchera peut être pas ?

    Merci d'avance

    Nat

  9. #9
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Ce que tu peux faire, après traitement du formulaire, c'est une redirection...

    Par contre, pour info, cette gestion peut avoir des impacts négatifs sur le référencement et sur l'accessibilité (mobiles, lecteurs d'écran, etc...).

Discussions similaires

  1. AsynkTask ne passe pas par onPostExecute()
    Par ElManoush dans le forum Android
    Réponses: 4
    Dernier message: 27/05/2015, 11h04
  2. Réponses: 2
    Dernier message: 18/10/2011, 09h07
  3. [MVC3] Le débogueur ne passe pas par global.asax en mode IIS
    Par CUCARACHA dans le forum ASP.NET MVC
    Réponses: 3
    Dernier message: 10/07/2011, 19h14
  4. Réponses: 1
    Dernier message: 15/01/2008, 12h39
  5. Jointure simple qui ne passe pas par les index ?!
    Par souch dans le forum Oracle
    Réponses: 13
    Dernier message: 24/07/2007, 17h03

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