【问题标题】:CakePHP error handlingCakePHP 错误处理
【发布时间】:2012-09-05 15:19:14
【问题描述】:

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

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

我已经创建 AppError 我的代码是

app/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 致命错误:在第 318 行调用 D:\wamp\www\survey\app\Controller\UsersController.php 中未定义的方法 UsersController::cakeError()

我错过了什么?

【问题讨论】:

    标签: cakephp error-handling cakephp-1.3


    【解决方案1】:

    我认为您正在使用 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() 函数中放置条件并将用户重定向到不同的页面。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        这里是Error Configuration的链接。您可以轻松实现所需的目标。

        【讨论】:

          猜你喜欢
          • 2015-03-21
          • 2012-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多