Cakephp, Custom Routes и Pagination - параметры пагинации переданы неверно - PullRequest
2 голосов
/ 17 августа 2011

У меня проблема с пользовательскими маршрутами и нумерацией страниц. Я прочитал все темы, которые смог найти, но, похоже, никто не сталкивался с такой же проблемой.

что я сделал, подключил этот маршрут:

Router::connect('/a/:username/*', array('controller' => 'users', 'action' => 'view'),array('pass' => array('username'),'username' => '[^-]+'));

это полностью работает для моих пользователей (я изменил действие users / view, чтобы принимать имена пользователей вместо идентификаторов).

Но наши профили пользователей - это своего рода блоги, в которых вы можете разбивать на страницы все сообщения пользователя. поэтому я изменил нумерацию ссылок на страницы:

    $paginator->options(array('url'=> array('controller' => 'users',
                                            'action' => 'view',
                                            'username' => strtolower($user['User']['username']) ,
                                        ),
    ));

и

<div class="pagination">
    <?php if($this->Paginator->hasPrev()): ?>
    <?php echo $this->Paginator->prev(__('Previous', true), null, null, array('class' => 'disabled')); ?>
    <?php endif;?>
    <?php echo $this->Paginator->numbers(array('separator' => '')); ?>
    <?php if($this->Paginator->hasNext()): ?>
    <?php echo $this->Paginator->next(__('Next', true), null, null, array('class' => 'disabled')); ?>
    <?php endif; ?>
</div>

Это также работает в случае генерации ссылки. paginator создает нужные ссылки, такие как

domain/username/page:2

Моя проблема в том, что имя пользователя не передано правильно. при отладке $ this-> params в users / view «параметры пагинации» обрабатываются как часть «пользовательского параметра». в этом случае я получаю:

[controller] => users
[action] => view
[username] => tim/page:2
[named] => Array
    (
    )

[pass] => Array
    (
        [0] => tim/page:2
    )

где tim - имя пользователя и страница: 2 - только параметр нумерации страниц. но по какой-то причине оба параметра записываются в один вместо имени пользователя в 'username', а страница в названный параметр страницы. после того, как действие users / view отклоняет вызов (потому что такого пользователя нет), приложение пытается перенаправить на тот же просмотр с идентификатором пользователя вместо имени в цикле и останавливается после слишком большого количества перенаправлений.

Я действительно понятия не имею, почему параметры пагинации передаются в имя пользователя. если бы у кого-то была идея, что я делаю неправильно, это сделало бы меня очень, очень счастливым. : -)

1 Ответ

1 голос
/ 17 августа 2011

проблема в вашем регулярном выражении: Router::connect('/a/:username/*', array('controller' => 'users', 'action' => 'view'),array('pass' => array('username'),'username' => '[^\/]+'));

Или может быть \w+ (Я не знаю критерии для вашего имени пользователя.

...