Bonjour à tous,

Travaillant actuellement sur un projet cakephp 2.5, je rencontre deux problèmes sur le routing :

Le premier concerne la pagination, en effet lorsque je change de page, mon url reprend l'affichage "classique", avec "/controller/action/page:2/, or je souhaite conserver l'url suivante "/category/page:2. Je ne sais donc pas comment integrer à ma route la pagination. Voici le code en question :

Route :

    Router::connect('/:category',
        array('controller' => 'posts', 'action' => 'index'),
        array('pass' => array('category'), 'category' => '[a-z]+')
    );

Enfin, le second problème concerne le routing sur un formulaire de recherche, ou là une erreur 404 m'est renvoyée, voici le code :

Route :

    Router::connect('/recherche/*',
        array('controller' => 'posts', 'action' => 'search')
    );

Formulaire :


<?= $this->Form->create('Post', array('controller' => 'post', 'action' => 'search'));?>
                <?= $this->Form->input(false , array('type' => 'text', 'class' => 'text', 'label'=> false, 'value' => false));?>
                <?= $this->Form->button(false, array('class' => 'go', 'label'=> false)); ?>
            <?= $this->Form->end(); ?>

Malgré mes recherches je n'est pas encore trouvé de solution.
Merci pour votre aide.

2 réponses


passealasuite
Auteur
Réponse acceptée

Merci @mansaychai, effectivement ta piste était la bonne concernant la pagination, mon URL "/category/2" fonctionne bien. Néanmois le paginator ($this->Paginator->next) me renvoie toujours une URL 'classique' : "/controller/action/page:2/".

voici le code :

Router::connect('/:category/:page',
        array('controller' => 'posts', 'action' => 'index'),
        array('pass' => array('category', 'page'), 'category' => '[A-z]+', 'page' => '[0-9]+')
    );

Pour la recherche, j'ai toujours mon erreur 404.

Merci pour ton aide.

Bonjour,

Pour ta première question, tu peux essayer quelque chose comme ça. Tu dois bien indiquer les paramètres que tu veux faire passer dans ton URL, sinon ça marche pas.

Router::connect('/:category/page:id',
    array('controller' => 'posts', 'action' => 'index'),
    array('pass' => array('category', 'id'), 'category' => '[a-z]+', 'id' => '[1-9]+')
);

Pour le second point, il faudrait indiquer, au niveau de la route, ce qui doit passer en paramètre.
Si j'étais toi, j'essaierais quelque chose de ce genre :
Dans le formulaire :

    <?= $this->Form->input('entry' , array('type' => 'text', 'class' => 'text', 'label'=> false, 'value' => false));?>

Dans le routing :

    Router::connect('/recherche/*',
        array('controller' => 'posts', 'action' => 'search')
        array('pass' => array('entry'))
    );

C'est une solution sans garanti, mais je pense que c'est l'idée.