1

我正在使用 cakephp,我正在处理错误

我已经关注http://book.cakephp.org/1.3/en/view/1188/Error-Handling

我创建了 AppError 我的代码是

应用程序/app_error.php

<?php

    class AppError extends ErrorHandler {


        function error404() {
            //$this->controller->set('file', $params['file']);
            $this->_outputMessage('error404');
        }

    }
    ?>

我从我的控制器调用这个 error404

function userprofile($id = null) {
        $user = $this->Session->read('user');
        if($id != $user['User']['id'])
        {
            $this->cakeError('error404');
        }
}

但我发现 Erro Fatal error: Call to undefined method UsersController::cakeError() in D:\wamp\www\survey\app\Controller\UsersController.php 在第 318 行

我想念一些东西?

4

3 回答 3

0

从错误消息中返回的文件夹路径判断,您使用的是 CakePHP 2,而您拥有的文档和示例是 CakePHP 1.3。

请参阅2.0 书中的错误处理异常(说真的,阅读它们,有大量可用的异常),我认为它稍微复杂一些,但更灵活

于 2012-09-05T15:30:15.663 回答
0

对于 CakePHP 2.X,Object::cakeError()已被删除。相反,它已被许多例外所取代。以前称为 cakeError 的所有核心类现在都抛出异常。这使您可以选择处理应用程序代码中的错误,或者让内置的异常处理来处理它们。

在 CakePHP 2.0 中,对错误和异常处理的控制比以往任何时候都多。您可以使用 configure 配置要设置为默认错误处理程序和异常处理程序的方法。

这是错误配置的链接。您可以轻松实现所需的相同功能。

于 2012-09-06T06:39:37.450 回答
0

我认为您正在使用 CakePHP 1.3 并扩展此处定义的 ErrorHandler :

....\cake\libs\error.php

并根据此error404定义为:

function error404($params) {
    extract($params, EXTR_OVERWRITE);

    if (!isset($url)) {
        $url = $this->controller->here;
    }
    $url = Router::normalize($url);
    $this->controller->header("HTTP/1.0 404 Not Found");
    $this->controller->set(array(
        'code' => '404',
        'name' => __('Not Found', true),
        'message' => h($url),
        'base' => $this->controller->base
    ));
    $this->_outputMessage('error404');
}

在您的 ..../app/app_error.php 中,您已将其定义为

function error404() {
        //$this->controller->set('file', $params['file']);
        $this->_outputMessage('error404');
}

并且在 php 中这种类型的方法重载是不允许的。我想你已经得到了答案。

您可以做的是您可以在扩展的 AppError 类中创建自己的函数,然后在其中传递错误名称或模板名称

function customeError($errorMessage){
     $this->_outputMessage($errorMessage);
} 

然后根据不同的模板名称,您可以在 _outputMessage() 函数中放置条件并将用户重定向到不同的页面。

于 2012-09-06T12:00:33.137 回答