CakePHP"致命错误:未找到调试器的文件中未找到类'调试器'"

gre*_*ghz 7 php public cakephp-2.0

我从一个不引用Debugger类的文件中获取标题中引用的错误.如果我手动导入调试器,则错误仍会显示.在结尾的错误中引用的行号结束文件中的类定义.没有什么跟随}(也没有?>).我收到错误的文件并没有直接引用调试器,因为我可以告诉(因为没有明确使用Debugger).

这是堆栈跟踪:

( ! ) Fatal error: Class 'Debugger' not found in /home/gregg/workspace/Fueled/dapprly/backend/app/Plugin/Facebook/Controller/Component/FapiComponent.php on line 107
Call Stack
#   Time    Memory  Function    Location
1   0.0003  245664  {main}( )   ../index.php:0
2   0.0168  1657712 Dispatcher->dispatch( ) ../index.php:100
3   0.0237  2753568 Dispatcher->_invoke( )  ../Dispatcher.php:85
4   0.0237  2753768 Controller->constructClasses( ) ../Dispatcher.php:99
5   0.0237  2755712 ComponentCollection->init( )    ../Controller.php:638
6   0.0255  3057112 ComponentCollection->load( )    ../ComponentCollection.php:52
7   0.0255  3057600 class_exists ( )    ../ComponentCollection.php:99
8   0.0255  3057896 App::load( )    ../ComponentCollection.php:0
9   0.0257  3091416 ErrorHandler::handleError( )    ../ComponentCollection.php:551
Run Code Online (Sandbox Code Playgroud)

这是第107行的背景:

class FapiComponent extends Component {
    // -- snip -- //

    public function method()
    {
        $url = urlencode('http://url');

        $param = array(
        'access_token' => '##' ,
        'object' => 'user',
        'fields' => 'feed', 
        'callback_url' => $url);
        $id = $this->facebook->getAppId();
        $subs = $this->facebook->api('/' . $id . '/subscriptions' , 'POST' , $param);
    }
} // <-- line 107 ... nothing after this
Run Code Online (Sandbox Code Playgroud)

小智 13

这是由于一个PHP错误没有为编译时错误执行自动加载(例如E_STRICT).

这已在PHP 5.4.21中修复,CakePHP接受了变通方法请求.

要手动解决此问题并免除E_STRICTCakePHP的错误处理程序:

  1. core.php在首选编辑器中打开(您可以通过执行类似操作找到该文件find . -name core.php).
  2. 找到以下行: 'level' => E_ALL & ~E_DEPRECATED,
  3. 替换为: 'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,


gre*_*ghz 8

我发现了错误.

我已经展示过的这个类已经实现了initialize方法.但它的实现是

public function initialize($controller)
Run Code Online (Sandbox Code Playgroud)

这是一个E_STRICT错误,因为它与父方法的不同之处在于省略了类型提示.我的设置是捕获E_STRICT错误.此错误导致它查找调试器.我不确定为什么它不能自动加载它,但改变方法

public function initialize(Controller $controller)
Run Code Online (Sandbox Code Playgroud)

解决了我遇到的问题.