2012-05-02 21 views
7

Me sale el error al que hace referencia el título de un archivo que no hace referencia a la clase Debugger. Si importo Debugger manualmente, el error aún aparece. El número de línea al que se hace referencia en el error en el último} termina la definición de clase en el archivo. Nada sigue al} (¿tampoco?). El archivo en el que obtengo el error no hace referencia directa a Debugger por lo que puedo decir (como en, no hay un uso explícito de Debugger).CakePHP "Error fatal: Class 'Debugger' no encontrado" en un archivo que no hace referencia al depurador

aquí está el seguimiento de pila:

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

y aquí está el contexto alrededor de la línea 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

¿El depurador uso de componentes de clase? –

+0

no, encontré el error. Esta clase que he mostrado tiene implementado el método de inicialización. Pero está implementado como inicialización de función pública ($ controlador). Este es un error E_STRICT. Mi configuración es atrapar esos errores. Este error hace que busque el depurador. No estoy seguro de por qué no puede cargarlo automáticamente, pero cambiar el método para inicializar la función pública (Controller $ controller) solucionó el problema que estaba teniendo. – gregghz

Respuesta

8

he encontrado el error.

Esta clase que he mostrado tiene implementado el método de inicialización. Pero ha implementado como

public function initialize($controller) 

Este es un error E_STRICT ya que difiere del método de los padres al dejar fuera el tipo de pista. Mi configuración es atrapar errores E_STRICT. Este error hace que busque el depurador. No estoy seguro de por qué no es capaz de auto-carga, pero cambiando el método de

public function initialize(Controller $controller) 

ha solucionado el problema que estaba teniendo.

+1

También descubrí que esto sucedió porque PHP 5.4 incluye E_STRICT en el conjunto E_ALL ahora. Por lo tanto, necesita * excluir específicamente E_STRICT8 si no desea ver esos errores. En php 5.3 tenía que * incluir * E_STRICT específicamente si quería ver esos errores. – gregghz

0

Esto ocurre cada vez que tiene un error E_STRICT. El principal que tuve fue cuando ejecuté PHP 5.4, se requiere tener declaraciones de funciones públicas, privadas y protegidas.

13

Esto se debe a a a PHP bug que no realizó la carga automática para los errores de tiempo de compilación (por ejemplo, E_STRICT).

Esto se corrigió en PHP 5.4.21 y un workaround pull request fue aceptado por CakePHP.

Para solucionar este problema de forma manual y exenta E_STRICT del gestor de errores de CakePHP:

  1. core.php abierto en su editor preferido (se puede encontrar el archivo mediante la realización de algo así como find . -name core.php).
  2. Encuentre la siguiente línea: 'level' => E_ALL & ~E_DEPRECATED,
  3. Reemplazar con: 'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,
+0

mismo en php 5.5.30 – giuseppe

0

El problema es que php inferior a la versión 5.4.21 tiene un problema con el cargador automático de errores E_STRICT. (E_STRICT es un error de tiempo de compilación)

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

me encontré con el mismo problema exacto en algunos proyectos de edad, y él ha fijado en 2.7.4.

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

Así que la verdadera solución es actualizar a al menos 5.4.21 o esperar a que CakePHP 2.7.4

+1

mismo problema con php 5.5. A veces, la raíz del problema está en otra parte. – giuseppe

+0

Supongo que el mismo problema también estaba activo en php 5.5 –

Cuestiones relacionadas