CakePHP Маршрутизация с нумерацией страниц - PullRequest
0 голосов
/ 20 ноября 2011

Похоже, что это всплыло для других пользователей, но я не видел ответа, который выглядит как связанный с тем, чего я пытаюсь достичь.

Так что в основном у меня есть панель администратора для моего портфолио на /admin/portfolio/

и когда я перехожу на следующую страницу, я получаю это: /admin/portfolio/index/page:2 и /admin/portfolio/index/page:1

1.) Как удалить индекс из URL?Так что это просто /admin/portfolio/page:2

2.) Как мне сделать так, чтобы page:1 было просто /admin/portfolio/, и если кто-то пытается перейти на страницу 1, то он просто изменяет URL / перенаправляет их простоиндекс без параметра.В противном случае это означает, что у меня есть дубликаты для первой страницы.

Как я уже говорил ранее, я просмотрел некоторые примеры в Интернете, но все они кажутся очень запутанными и не совпадают с кодом, который я использовал (см. Ниже)поэтому я не уверен, как добиться того, что я делаю.

    <?php echo $this->Paginator->numbers(); ?>

    <?php echo $this->Paginator->prev('« Previous', null, null, array('class' => 'disabled')); ?>
    <?php echo $this->Paginator->next('Next »', null, null, array('class' => 'disabled')); ?> 

    <?php echo $this->Paginator->counter(); ?>

Я пробовал это:

<?php $this->Paginator->options(array('url'=>array(
'admin'=>true,
'controller' => 'portfolio', 
  'action' => 'index'))); ?>

Но я все еще получаю индекс в URL

Однако, добавив следующее: Router::connect('/admin/portfolio/*',array('admin'=>true,'controller'=>'portfolio','action'=>'index')); действительно избавляется от индекса из URL, НО это вызывает вторую проблему в том, что к URL может быть добавлено что угодно, и, следовательно, больше не является строгим и показывает 404 при просмотре поддельных страниц

Итак, я также попробовал:

Router::connect('/admin/portfolio/:page',
                    array('admin'=>true,'controller'=>'portfolio','action'=>'index',
                    array(
                     'pass' => array('page'),
                     'page'=> '[0-9]+'
                      )));

Но это тоже не работает, потому что страница не видна при маршрутизации!

1 Ответ

1 голос
/ 21 ноября 2011

Я бы предложил явно объявить ваш портфель маршрутов. Таким образом, вы не будете вмешиваться в какие-либо другие контроллеры / действия в вашем приложении.

Имея это в виду, определения маршрутов для части портфолио вашего приложения будут выглядеть следующим образом:

/**
 * add, edit and delete actions
 */
Router::connect('/admin/portfolio/add', array(
  'controller' => 'portfolio', 'action' => 'add', 'admin' => true
));
Router::connect('/admin/portfolio/delete/:id', array(
  'controller' => 'portfolio', 'action' => 'delete', 'admin' => true), array(
    'pass' => array('id')
  )
);
Router::connect('/admin/portfolio/edit/:id', array(
  'controller' => 'portfolio', 'action' => 'edit', 'admin' => true), array(
    'pass' => array('id')
  )
);

/**
 * index action
 */
Router::connect('/admin/portfolio', array(
  'controller' => 'portfolio', 'action' => 'index', 'admin' => true, 'page' => 1
));
Router::connect('/admin/portfolio/*', array(
  'controller' => 'portfolio', 'action' => 'index', 'admin' => true), array(
    'named' =>
      array('page' => '[\d]+'),
  )
);
...