2010-01-05 13 views
5

Actualmente estoy trabajando en una función de exportación en la aplicación cakephp y estoy haciendo una consulta que está obteniendo alrededor de 10.000 filas cada exportación que pastel puede manejar pero parece que debug_kit está usando mucha memoria y poniendo Yo uso más de 128 MB de memoria.Apagando el debug_kit dentro de la acción del controlador, Cakephp

He intentado escribir esto en la parte superior de la función pero el juego de depuración aún se está involucrando y usando grandes cantidades de memoria.

Configure::write('debug',0); 

Respuesta

9

HyperCas es correcto en lo que sugiere la devolución de llamada beforeFilter() como una solución adecuada.

El código podría ser algo como esto en el controlador donde la acción (es decir, exportación) reside:

function beforeFilter() { 
    // filter actions which should not output debug messages 
    if(in_array($this->action, array('export'))) { 
     Configure::write('debug', 0); 
    } 
} 

Se podría ajustar array('export') para incluir todas las acciones que desee para evitar la depuración.

0

Uso

Configure::write('debug',0); 

en /app/config/core.php

o utilizarla en la devolución de llamada beforeFilter() en el controlador. Eso detendría la depuración de todo el controlador si no verifica manualmente la acción actual (en $ this-> params ['action']).

Si el modelo tiene múltiples asociaciones que debería echar un vistazo al comportamiento controlable

http://book.cakephp.org/view/51/Controller-Attributes

+0

Eso lo detendrá, por supuesto, pero quiero parar por acción, ya que todavía me gustaría usarlo en otras ubicaciones. – Shard

+0

podría intentar la devolución de llamada beforeFilter() – HyperCas

0

también puede cambiar el nivel de depuración en config.php a 0. esto deshabilitará el kit de depuración de forma automática + su aplicación utilizará incluso menos memoria.

9

Solo para mejorar Benjamin Pearson's answer. Descargue el componente en lugar de desactivar la depuración.

public function beforeFilter() { 
    parent::beforeFilter(); 

    if(in_array($this->action, array('export'))) { 
     $this->Components->unload('DebugKit.Toolbar'); 
    } 
} 
+0

esto no funcionará en cakephp1.3 porque no creo que cakephp1.3 permita cargar y subir los componentes sobre la marcha. Esta funcionalidad se ha agregado a cakephp 2.x http://book.cakephp.org/2.0/en/controllers/components.html http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Components.html @Hamid ¿sabes cómo hacer esto en caakephp1.3? – Garry

+0

@nedstark No pude encontrar un método similar en 1.3.Es probable que tengas razón. ¿Has probado la solución de Benjamin? –

+0

Prefiero esta respuesta a la desactivación de la depuración por completo. Muchas gracias. –

0

en cakephp3 abierta Bootstrap.php archivo en la carpeta config comentarios o eliminar la carga DebugKit

if (Configure::read('debug')) { 
    // Plugin::load('DebugKit', ['bootstrap' => true]); 
} 

eso es todo .. que descargará el DebugKit desde la aplicación

0

Desactivar debug_kit sobre la marcha

class AppController extends Controller { 
    public function beforeFilter() { 
     Configure::write('debug', 0); 
    } 
} 
Cuestiones relacionadas