Я использую компонент Paginator и всякий раз, когда пользователь/бот переходит на номер страницы, который является высоким, он получит исключение Not Found. Это может быть хорошо, но я хотел бы перенаправить пользователя с 301 обратно на первую страницу.
Теперь я знаю, что [документация cakePHP 2] [1] рассказывает мне, как это сделать для отдельных случаев, но я хочу сделать это для всех разбиений на страницы без добавления кода каждый раз.
Я попытался создать свой собственный компонент Paginator в своем приложении с основным компонентом как родителем, но поскольку у меня нет пространств имен, я просто вызываю свой собственный компонент и кончаю в цикле
<?php
App::uses('PaginatorComponent', 'Vendor/Controller/Component');
class PaginatorComponent extends PaginatorComponent {
public function paginate($object = null, $scope = array(), $whitelist = array()) {
try {
PaginatorComponent::paginate($object, $scope, $whitelist);
} catch (NotFoundException $e) {
if ($this->request->query('page') <= 1) {
throw new NotFoundException();
}
$this->redirect($this->here);
}
}
}
Вы не можете назвать свой компонент PaginatorComponent
поскольку он уже существует! Эта линия должна сразу же звонить тревожным звонкам: -
class PaginatorComponent extends PaginatorComponent {
Вместо этого назовите свой компонент чем-то другим, например CustomPaginatorComponent
: -
class CustomPaginatorComponent extends PaginatorComponent {
Вы также захотите вызвать parent::paginate()
в свой собственный метод PaginatorComponent::paginate()
paginate()
а не PaginatorComponent::paginate()
.