2012-05-02 6 views
7

Ich bekomme den Fehler im Titel aus einer Datei, die nicht auf die Debugger-Klasse verweist. Wenn ich den Debugger manuell importiere, wird der Fehler immer noch angezeigt. Die Zeilennummer, auf die im letzten Fehler verwiesen wird}, die die Klassendefinition in der Datei beendet. Nichts folgt dem} (da ist auch nicht?). Die Datei, in der ich den Fehler erhalte, verweist nicht direkt auf Debugger, soweit ich das beurteilen kann (da es keine explizite Verwendung von Debugger gibt).CakePHP "Fataler Fehler: Klasse 'Debugger' nicht gefunden" in einer Datei, die nicht auf Debugger verweist

hier ist der Stack-Trace:

(!) 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 

und hier ist der Kontext um die Linie 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 
+0

Hat die Klasse Component Verwendung Debugger zu aktualisieren? –

+0

nein, ich habe den Fehler gefunden. Diese Klasse, die ich gezeigt habe, hat die Initialisierungsmethode implementiert. Aber es ist als öffentliche Funktion initialisiert ($ controller) implementiert. Dies ist ein E_STRICT-Fehler. Mein Setup fängt diese Fehler ab. Dieser Fehler führt dazu, dass er nach Debugger sucht. Ich bin mir nicht sicher, warum es nicht in der Lage ist, es automatisch zu laden, aber ändere die Methode auf öffentliche Funktion initialisieren (Controller $ Controller) behoben das Problem, das ich hatte. – gregghz

Antwort

8

ich den Fehler gefunden.

Diese Klasse, die ich gezeigt habe, hat die Initialisierungsmethode implementiert. Aber es ist implementiert als

public function initialize($controller) 

Dies ist ein E_STRICT Fehler ist, da sie von der übergeordneten Methode unterscheidet sich von der Art Hinweis Weglassen. Mein Setup fängt E_STRICT Fehler ab. Dieser Fehler führt dazu, dass er nach Debugger sucht. Ich bin mir nicht sicher, warum es automatisch zu laden nicht in der Lage ist, aber die Methode

public function initialize(Controller $controller) 

ändert das Problem behoben ich hatte.

+1

Ich fand auch heraus, dass dies passierte, weil PHP 5.4 jetzt E_STRICT im E_ALL-Set enthält. Sie müssen also * 8 E_STRICT ausdrücklich ausschließen, wenn Sie diese Fehler nicht sehen möchten. In php 5.3 musstest du * E_STRICT * explizit angeben, wenn du diese Fehler sehen willst. – gregghz

0

Dies tritt jedes Mal auf, wenn Sie einen E_STRICT-Fehler haben. Die wichtigste, die ich hatte, war, wenn Sie PHP 5.4 ausführen, müssen Sie öffentliche, private und geschützte Funktionsdeklarationen haben.

13

Dies ist aufgrund einer PHP bug, die nicht automatisch laden für Kompilierungsfehler (z. B. E_STRICT) durchgeführt.

Dies wurde in PHP 5.4.21 behoben und ein workaround pull request wurde von CakePHP akzeptiert.

Um manuell dieses Problem zu umgehen und E_STRICT von CakePHP Fehlerbehandlung auszunehmen:

  1. öffnen core.php in Ihrem bevorzugten Editor (Sie die Datei so etwas wie find . -name core.php, indem finden konnte).
  2. Finden Sie die folgende Zeile: 'level' => E_ALL & ~E_DEPRECATED,
  3. Ersetzen Sie es mit: 'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,
+0

das gleiche in PHP 5.5.30 – giuseppe

0

Das Problem, dass PHP niedriger als Version 5.4.21 ein Problem mit dem Autoloader auf E_STRICT Fehler hat. (E_STRICT ist eine Kompilierung Fehler)

https://bugs.php.net/bug.php?id=65322

begegnete ich genau das gleiche Problem auf einige alte Projekte, und es ist in 2.7.4 festgelegt.

https://github.com/cakephp/cakephp/issues/7376

So ist die wirkliche Lösung ist mindestens 5.4.21 oder warten Sie auf CakePHP 2.7.4

+1

das gleiche Problem mit PHP 5.5.Manchmal ist die Wurzel des Problems woanders. – giuseppe

+0

Ich denke, das gleiche Problem war auch in PHP 5.5 aktiv –

Verwandte Themen