如何发送410在cakephp中消失

时间:2015-08-08 10:15:13

标签: php cakephp http-response-codes

我想让服务器对CakePHP中未发布的旧URL进行410响应。

CakePHP提供了各种异常,如404,500等等,但没有像410一样的东西。

如果有人打开网站上已不存在但过去常常存在的旧网址,我是否可以通过服务器410做出响应。

谢谢,

2 个答案:

答案 0 :(得分:2)

首选方法是抛出异常。扩展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);
    }
}

答案 1 :(得分:0)

我按照以下方式解决了这个问题。

我添加了#34;消失了#34;功能在&#34; AppExceptionRenderer&#34;

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);

这对我有用。