2010-01-05 3 views
5

В настоящее время я работаю над функцией экспорта в приложении cakephp, и я делаю запрос, который получает около 10 000 строк, каждый экспорт которых может обрабатывать торт, но debug_kit, похоже, использует много памяти и помещает я использовал более 128 Мб памяти.Отключение debug_kit в действии контроллера, Cakephp

Я попытался попытаться написать это в верхней части функции, но debugkit все еще участвует и использует большие объемы памяти.

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

ответ

9

HyperCas правилен в предложении обратного вызова beforeFilter() в качестве соответствующего решения.

Код может выглядеть примерно так в контроллере, где действие (т.е. экспорт) проживает:

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

Вы бы настроить array('export') включить все действия, которые вы хотите, чтобы предотвратить отладку.

0

Использование

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

в /app/config/core.php

Или использовать его в функцию обратного вызова beforeFilter() на контроллере. Это остановит отладку для всего контроллера, если вы не проверите вручную для текущего действия (в $ this-> params ['action']).

Если ваша модель имеет несколько ассоциаций, вы должны взглянуть на Containable поведение

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

+0

Это, конечно, остановит его, но я хочу остановиться на основе каждого действия, поскольку я все еще хотел бы использовать его в других местах. – Shard

+0

вы можете попробовать обратный вызов beforeFilter() – HyperCas

0

вы также можете переключить уровень отладки в config.php на 0. это автоматически отключит комплект отладки + ваше приложение будет использовать еще меньше памяти.

9

Просто для улучшения Benjamin Pearson's answer. Выгрузите компонент вместо отключения отладки.

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

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

, это не будет работать в cakephp1.3, потому что я не думаю, что cakephp1.3 позволяет загружать и загружать компоненты на лету. Эта функциональность была добавлена ​​в cakephp 2.x http://book.cakephp.org/2.0/en/controllers/components.html http://book.cakephp.org/1.3/ru/The-Manual/Developing-with-CakePHP/Components.html @ Хамид, вы знаете, как это сделать в caakephp1.3? – Garry

+0

@nedstark Я не смог найти аналогичный метод в 1.3.Скорее всего, вы правы. Вы попробовали решение Бенджамина? –

+0

Я предпочитаю этот ответ полностью отключить отладку. Спасибо. –

0

в cakephp3 открыт bootstrap.php файл в конфигурация папка комментариев или снимите DebugKit ЗАГРУЗКИ

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

вот и все .. это разгрузит DebugKit из приложения

0

Отключить debug_kit на лету

class AppController extends Controller { 
    public function beforeFilter() { 
     Configure::write('debug', 0); 
    } 
} 
Смежные вопросы