Réaliser l'effet inverse du routing

Par Maenhyr, il y a 14 ans


Bonsoir!
alors voila j'aurai plusieurs questions à vous poser à propos de l'url rewriting de CakePHP.

ce qui fait que quand je tape monsite.fr/blog/mon-slug, je récupère bien le résultat de la requête sur le controller et l'action demandé.

Comment réussir à faire l'effet inverse? C'est à dire que si j'entre en url : monsite.fr/posts/show/mon-slug, mon url rewriting s'active pour recréer monsite.fr/blog/mon-slug?
Dois je aller taper dans le .htaccess? Ou bien directement créer mon lien avant l'envoi de mon formulaire?

Merci d'avance pour vos réponses.

3 réponses

elscorto, il y a 14 ans

Salut,

  • Pour ma part, je fais un this->redirect($this->referer()) pour qu'il appelle la page qui a appelé l'action en cours, après je ne sais pas si sa répond vraiment à ta demande

  • Je ne vois pas en quoi ça poserai un soucis niveau SEO, le routing est justement là pour l'améliorer.

Maenhyr, il y a 14 ans

Le problème en utilisant le $this->redirect($this->referer()) est que je perds mon array avec les erreurs de validation. J'ai utilisé le tutoriel sur les commentaires en CakePHP du site.

elscorto, il y a 14 ans

Ok, je comprends

J'ai jamais utilisé mais sur la doc j'ai trouvé ceci

Displaying and checking errors
FormHelper::error(string $fieldName, mixed $text, array $options)
Shows a validation error message, specified by $text, for the given field, in the event that a validation error has occurred.

Options:

‘escape’ bool Whether or not to html escape the contents of the error.
‘wrap’ mixed Whether or not the error message should be wrapped in a div. If a string, will be used as the HTML tag to use.
‘class’ string The classname for the error message
FormHelper::isFieldError(string $fieldName)
Returns true if the supplied $fieldName has an active validation error.:

<?php
if ($this->Form->isFieldError('gender')) {
echo $this->Form->error('gender');
}
Note
When using FormHelper::input(), errors are rendered by default.

Je pense que tu devrai pouvoir t'en sortir avec ça

Dans ta vue

if($this->Form->isFieldError(Comment.nomDeTonChamps)
    echo $this->Form->error(Comment.nomDeTonChamps,'messageErreur',$optionsSiTuAs);

Après je ne sais pas si le message peut être récupéré sur ton model, normalement je dirai que oui.