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

Symfony PHP Discussion :

Erreur 404 en production mais pas en test [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 13
    Points
    13
    Par défaut Erreur 404 en production mais pas en test
    bonjour tout le monde,
    J'écris ce post car je ne sais vraiment plus quoi faire avec ce probléme.
    Voila,je suis en train de développer un site web en symfony avec un formulaire contact qui envoie un mail pour des renseignements ou autre.

    Le probleme c'est que en test, tout marche nickel ,et le mail est bien envoyé.
    Sauf qu'en prod (Je suis chez ovh),j'ai un 404 not found.

    Je vous mets l'action de la page contact
    Code : 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
     
    public function executeContacts(sfWebRequest $request)
      {
      $this->form = new ClientsForm();
     
     
     if ($request->isMethod('post'))
        {
         $this->form->bind($request->getParameter('client'));
          if ($this->form->isValid())
    	      {
             $this->redirect('mopsol/submit?'.http_build_query($this->form->getValues()));
     
       }
        }
      }
    Qui appelle donc la page submit, qui envoie le mail:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function executeSubmit($request)
    {
     
     	 $message = $this->getMailer()->compose(
    	     	$request->getParameter('email'),
          		array('destinataire1@exemple.com','destinataire2@exemple.com','destinataire3@exemple.com'),
          		'Message from '.$request->getParameter('first_name').' '.$request->getParameter('last_name').' concerning : '.$request->getParameter('subject') ,
           		$request->getParameter('message'));
    	$this->getMailer()->send($message);
    	$this->redirect('mopsol/thankyou');
    }
    L'erreur que j'ai en production est :

    The requested URL /en/mopsol/submit/first_name/faycal/last_name/Elgharbi/email/xxxx@gmail.com/subject/Other/message/loolo was not found on this server.

    Je crois que l'erreur vient du passage de contacts a submit,mais je sais vraiment pas quoi faire.
    Je trouve ca vraiment bizarre.
    Merci pour tout aide

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Web Etudiant
    Inscrit en
    Avril 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web Etudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    je suis pas pro, mais apparemment, quand tu envoie vers la page d’envoi du formulaire, tu a avec http_build_query une adresse du type /monappli/monmodule/mapage/paramaetre1/parametre2/parametre3 etc

    Il faudrait peut-être passé directement le formulaire ou essayé autre chose.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Salut Hugo,
    Je doute que ca soit ca.
    Le truc que je comprends pas c'est pkoi en dev tout marche bien et en prod non!!!
    J'ai déja éssayé de faire passer le formulaire direct (envoyer le mail direct) mais ca n'a pas l'air de trop marcher.


    Ca doit pas être un pb de configuration plutot?

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Vérifie que sur ton serveur dans la configuration de apache, le mod_rewrite soit bien actif.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Bonjour,
    Je suis vraiment désolé du retard de ma réponse.
    Tout d'abord Michel, je sais pas comment je fais cette vérification.
    Ensuite,je crois et vu que j'ai l'offre de base d'ovh que je ne dois pas avoir cette option.
    Sinon,je pensais a ne pas rediriger et envoyer directement mon mail a partir de l'action contact (en changeant l'action dans la vue) mais je sais pas pkoi mes arguments ne sont pas pris en compte.
    En gros, je prend le code qui est dans l'action de submit et je le met directement dans l'action contacts.
    Ce qui donne un code comme celui la :
    Code : 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
     
    public function executeContacts(sfWebRequest $request)
      {
      $this->form = new ClientsForm();
     
     
     if ($request->isMethod('post'))
        {
         $this->form->bind($request->getParameter('client'));
          if ($this->form->isValid())
    	      {
    //J'envoie le mail au lieu de rediriger vers submit.
              $message = $this->getMailer()->compose(
    	     	$request->getParameter('email'),
          		array('destinataire1@exemple.com','destinataire2@exemple.com','destinataire3@exemple.com'),
          		'Message from '.$request->getParameter('first_name').' '.$request->getParameter('last_name').' concerning : '.$request->getParameter('subject') ,
           		$request->getParameter('message'));
    	$this->getMailer()->send($message);
    	$this->redirect('mopsol/thankyou');
     
       }
        }
      }
    le $request -> getParameter ne me prend rien du tout...
    Comment pourrais je faire?
    Merci pour tout

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je sens une confusion importante et une masse de question que je n'arrive pas à isoler au seins de ta prose.

    Pour le mod_rewrite fait dans ton dossier web un simple fichier test.php qui va comprendre le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # test.php
    <?php
    phpinfo();
    et tu l'exécutes depuis ton explorateur. Tu auras ainsi la configuration de php et les modules activés.

    De mémoire, le mod_rewrite est activé chez OVH.

    Pour les autres questions, soit tu traites l'une après l'autre, soit tu es plus précis dans tes demandes, là, c'est trop confus pour que je puisse faire le tris.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    J'ai trouvé que le mod_rewrite était activé (dans le fichier .htaccess)
    Sinon, je vois pas ou il ya confusion, puisqu'au lieu de rediriger vers l'action submit, je veux directement envoyer mon mail (c'est a dire faire ce que fait l'action submit mais dans contact cette fois).
    Mais le problème est que je n'arrive pas a récupérer les valeurs passer dans le formulaire qd je veux envoyer le mail.

  8. #8
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    L'age aidant, il m'arrive de switcher d'un message d'aide à l'autre et de répondre complètement à côté de la plaque pour celui qui à eu le malheur de vaguement ressembler à l'autre.

    Tu es celui-ci.

    Dans le cadre d'un envoie d'email, le mod_rewrite n'a rien a voir.

    Pourrais-tu essayer de remplacer dans executeContacts la commande $this->redirect('mopsol/submit?'.http_build_query($this->form->getValues())); par $this->forward('mopsol/submit?'.http_build_query($this->form->getValues()));. Pour voir...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Merci

    Ce n'est pas la bonne syntaxe pour forward
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->forward('mopsol/submit?'.http_build_query($this->form->getValues()));
    Du coup j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->forward('mopsol','submit?'.http_build_query($this->form->getValues()));
    Mais ca me mets des erreurs (je crois que ce n'est pas la bonne formulation pour prendre des arguments.

    Mais tu crois pas que ce qui pose plutot probleme dans mon cas serait plutot le http_build_query qui ne serait pas supporté dans mon serveur?
    Pourrais tu voir pkoi mon post d'hier de 14:01 ne marche pas (je n'utilise pas le http_build_query).

  10. #10
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Dans le cas du forward tu n'as pas besoins de passer les données vu que le request reste identique (à la différence du redirect).

    Effectivement, j'ai juste remplacé redirect par forward, mais forward ne permet pas de passer des paramètres, sans intérêt vu que que l'on reste dans la même instance du programme. Donc la commande deviendrait : $this->forward('mopsol','submit')D'un autre côté, si tu dois exécuté cette opération depuis plusieurs action mais jamais depuis un appel de type GET ou POST, tu aurais plutôt intérêt à faire soit une fonction, soit un objet et à l'utiliser, plutôt que de faire appel à une action (au sens symfony) qui est plus lourde à gérer.

    J'ai regardé ton code, il est à priori viable, mais je ne vois pas l'intérêt du form, ni du valide sur le form (mais il faudrait voir le code du form). La récupération des paramètres du request me semble plus logique. Réfléchi à réécrire ton action dans une fonction globale.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Le form est pour le formulaire d'envoi de mail dont voici son code ici:

    Code : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    class ClientsForm extends BaseClientsForm
    {
     protected static $subjects = array('Booking' => 'Booking','The appartment' => 'The appartment','Other' => 'Other');
     
      public function configure()
      {
     
      	$this->setWidgets(array(
          'first_name'    => new sfWidgetFormInputText(),
      	  'last_name'    => new sfWidgetFormInputText(),
          'email'   => new sfWidgetFormInputText(),
          'subject' => new sfWidgetFormSelect(array('choices' => self::$subjects)),
          'message' => new sfWidgetFormTextarea(),
        ));
     
        $this->widgetSchema->setLabels(array(
      'first_name'    => 'First Name',
      'last_name'    => 'Last Name',
      'email'   => 'Email address',
      'subject' => 'Subject',
      'message' => 'Message'
    ));
    	    $this->setDefaults(array('email' => 'Your email here', 'first_name' => 'Your first name', 'last_name' => 'Your last name'));
     
    	    $this->widgetSchema->setNameFormat('client[%s]');
     
    	    $this->setValidators(array(
          'first_name'    => new sfValidatorString(array('required' => false,)),
          'last_name'    => new sfValidatorString(array('required' => false,)),
          'email'   => new sfValidatorEmail(array(), array('invalid' => 'L\'adresse email est invalide.')),
          'subject' => new sfValidatorChoice(array('choices' => array_keys(self::$subjects))),
          'message' => new sfValidatorString(array('min_length' => 4), array(
            'required'   => 'Le champ message est obligatoire.',
            'min_length' => 'Le message "%value%" est trop court. Il faut au moins %min_length% caractères.',
          )),
        ));
     
    	$this->validatorSchema->setOption('allow_extra_fields', true);
        $this->validatorSchema->setOption('filter_extra_fields', false);
      }
    }
    Le souci que j'ai est que je n'arrive pas a récupérer les valeurs rentrés par l'utilisateur avec le $request->getParameter('xxx') directement dans executeContacts.
    J'y arrive seulement en faisant le redirect avec http_build_query.

  12. #12
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    L'idée est dans l'action qui reçoit la demande, de vérifier le form par bind et is_valid. Puis de récupérer les données depuis le form (par un getValues() par exemple).

    De là, tu peux préparer l'appel d'une fonction interne qui enverra la demande, sans passer par un forward ou un redirect. Laisser un lien url susceptible d'envoyer un message sans contrôle signifie que n'importe qui pourrait ce servir de ton application pour envoyer directement un message à n'importe qui d'autre.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Bon,
    Je suis arrivé a faire marché le truc
    En utilisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->form->getValue('xxxx');
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $request ->getParameter('xxxx');
    Et cela sans faire de redirection !!


    Je ne comprends tjrs pas pkoi getParameter ne me donne rien...
    Mais bon j'ai ce que je veux

    Merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/08/2011, 10h26
  2. Eclipse : Signe d'erreur sur le projet, mais pas de trace
    Par the watcher dans le forum Eclipse
    Réponses: 1
    Dernier message: 04/07/2011, 19h17
  3. Réponses: 6
    Dernier message: 20/08/2009, 21h21
  4. [JpGraph] erreur 404 en ligne mais pas en local
    Par Lert Sarin dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/07/2009, 10h45
  5. Erreur sur un poste mais pas sur un autre
    Par hawk² dans le forum Framework .NET
    Réponses: 10
    Dernier message: 27/08/2007, 09h33

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