Как отправить 410 ушедшего в тортStack Overflow

Я хочу, чтобы сервер отправил ответ 410 для моих старых неопубликованных URL-адресов в CakePHP.

CakePHP предоставляет множество исключений, таких как 404, 500 и т. Д., Но ничего похожего на 410 нет.

Есть ли способ, которым я могу сервер 410 пропал ответ, если кто-то открывает старый URL, который больше не существует на веб-сайте, но раньше был.

Спасибо,

3

Решение

Предпочтительным способом является создание исключений. Исключения, расширяющие HttpException. Вы также можете расширить этот класс и создать собственное исключение.

https://github.com/cakephp/cakephp/blob/3.0.11/src/Network/Exception/BadRequestException.php

<?php

use Cake\Network\Exception\HttpException;

class GoneException extends HttpException
{
/**
* Constructor
*
* @param string $message If no message is given 'Gone' will be the message
* @param int $code Status code, defaults to 410
*/
public function __construct($message = null, $code = 410)
{
if (empty($message)) {
$message = 'Gone';
}
parent::__construct($message, $code);
}
}
2

Другие решения

Я сделал следующее, чтобы решить это.

Я добавил функцию «ушел» в «AppExceptionRenderer»

public function gone($error) {

$this->controller->layout = 'nopageexists';

$this->controller->set('title_for_layout', __('example.com: Page not found'));
$this->controller->set('meta_description', '' );
$this->controller->set('meta_keywords', '');

// This will execute 404 Error Page without redirection added by vinod...
$this->controller->response->statusCode(410);
$this->controller->render('/Errors/error404');
$this->controller->response->send();
}

Создал пользовательский класс в app / Lib / myException.php

class GoneException extends CakeException {

/**
* Constructor
*
* @param string $message If no message is given 'Not Found' will be the message
* @param integer $code Status code, defaults to 410
*/
/*
public function __construct($message = null, $code = 410) {
if (empty($message)) {
$message = 'Gone';
}
parent::__construct($message, $code);
}
*/
protected $_messageTemplate = 'Test';
}

Добавлено ниже в контроллере, где я хочу показать 410 ушел.

throw new GoneException('Gone', 410);

Это сработало для меня.

0

По вопросам рекламы [email protected]