10
votes

Symfony: adresse e-mail comme paramètre de demande

J'ai des problèmes avec la transmission d'une adresse e-mail dans une URL à une application Symfony.

L'URL ressemble à p> xxx pré>

Cela entraînera toujours un Sferror404Exception code>, sauf lorsque la période est supprimée. Après avoir fait du googling, la seule solution que j'ai encore vue est que Htackess ignore l'URL en raison de la période actuelle. Cependant, lorsque j'ajoute le correctif suggéré à Htaccess, comme: P>

404 | Not Found | sfError404Exception
Empty module and/or action after parsing the URL "/unsubscribe/email/me@example.com" (/).
stack trace

1. at ()
  in SF_SYMFONY_LIB_DIR/controller/sfFrontWebController.class.php line 44 ...
          41.
          42.       if (empty($moduleName) || empty($actionName))
          43.       {
          44.         throw new sfError404Exception(sprintf('Empty module and/or action after parsing the URL "%s" (%s/%s).', $request->getPathInfo(), $moduleName, $actionName));
          45.       }
          46.
          47.       // make the first request
2. at sfFrontWebController->dispatch()
  in SF_SYMFONY_LIB_DIR/util/sfContext.class.php line 159 ...
         156.    */
         157.   public function dispatch()
         158.   {
         159.     $this->getController()->dispatch();
         160.   }
         161.
         162.   /**
3. at sfContext->dispatch()
  in /home/web/htdocs/index.php line 10 ...
           7. require_once(SF_ROOT_DIR.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'ProjectConfiguration.class.php');
           8.
           9. $configuration = ProjectConfiguration::getApplicationConfiguration(SF_APP, SF_ENVIRONMENT, SF_DEBUG);
          10. sfContext::createInstance($configuration)->dispatch();


1 commentaires

+1 comme je pense que je vais courir dans ce problème aussi


3 Réponses :


0
votes

Votre problème n'est pas avec les règles de réécriture. Considérant que Symfony lance l'exception, la demande de la demande est de faire symporer.

Pouvez-vous poster la trace de trace pour l'exception? Si vous avez sf_logging_enabled, il doit enregistrer des informations assez utiles pour déboguer le routage.


2 commentaires

J'ai ajouté la trace à l'organe de la question.


HM, on dirait que cela obtient l'URL OK. Sf_logging_enabled fournit-il des détails sur la raison pour laquelle votre itinéraire a échoué?



3
votes

Je ne sais pas ce que vous faites dans symfony, mais cela peut aider à être clair que ce qui suit n'est pas une URL valide:

http://example.com/unsubscribe/email/me%40example.com


2 commentaires

Merci, j'avais envisagé d'utiliser une version évasée du "@", mais malheureusement, qui ne semble pas être le problème pour moi - si l'ampersand est échappé, non évaluée ou complètement absente, la période gère toujours de jeter Symfony: /


Ah intéressant! Je pense que tu ne le cloudas pas là-bas. J'ai eu un coup d'œil et il semble que cela arrive à d'autres personnes et que ce soit un "problème connu" - semble que les configurations .htaccess qui viennent avec symfony (ou qu'ils recommandent) causent le. être interprété! Il semble être couvert dans des réponses à un message ici: Mail- archive.com/symfony-userers@googlegroups.com/mooglegroups.com/msg08689.htm l Comme je ne sais pas comment symfony je ne peux pas donner une copie + coller, mais les suggestions de comment changer .htaccess to correction Dans les réponses, c'est un sens - bonne chance! 8)



10
votes

Par défaut, Symfony traite . et / comme séparateurs de paramètres.
Cela rend très facile à faire correspondre une URL comme: xxx

mais n'aide pas avec les adresses e-mail.

Heureusement, vous pouvez remplacer le . < / Code> Séparateur en spécifiant votre propre motif.
Il suffit d'ajouter les exigences Ligne ci-dessous sur votre routage: xxx

. + dans l'exigence est une correspondance régulière n'importe quoi. Le . correspond à n'importe quel caractère et le + signifie une-ou-plusieurs.

(Testé dans Symfony 1.4)


1 commentaires

Si vous utilisez plusieurs paramètres après l'adresse e-mail, vous pouvez alternativement utiliser [^ \ /] + de sorte qu'il ne correspond pas aux barres obliques de l'itinéraire.