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

  • J'affiche des articles avec en bas de page un formulaire pour ajouter un commentaire. Lorsque ce dernier n'est pas correctement rempli, il me renvoie sur la page avec les erreurs. Seulement le routage de CakePHP ne fonctionne pas dans les deux sens.
    J'ai déjà créé le router:: connect suivant :

    Router::connect('/blog/:slug', array('controller' => 'posts', 'action' => 'show'), array('pass' => array('slug'), 'slug' => '[a-z0-9-]+'));

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?

  • Le fait de faire toutes ces redirections ne risque-t-il pas de poser un soucis au niveau SEO? J'aimerais que mon site soit bien référencé.

Merci d'avance pour vos réponses.

3 réponses


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
Auteur

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.

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.