10 апреля 2015 г.

Как в Yii 2 включить Debugger Toolbar

В Yii 2 во вновь созданном приложении в режиме разработки по умолчанию внизу страницы отображается панель отладчика, которая выглядит вот так:


Есть, правда, одна особенность - по умолчанию она отображается только при просмотре сайта с локального компьютера, то есть - с адреса 127.0.0.1. Лично я же использую виртуальную машину с Ubuntu Server, на котором и крутится приложение Yii 2 - а сама разработка идет из-под Windows. То есть, хост уже не локальный. И полосы отладчика не видно...

Поиски в Гугле довольно быстро раскрыли источник проблемы - в конфигурации надо дополнительно указать параметр allowedIPs, где перечислить допустимые IP.

Однако, чтобы найти где именно надо внести правки, ушло прилично времени. В одном месте (на Тостере) даже промелькнуло, что для отображения тулбара дебаггера надо включить SEO-ссылки через urlManager. Но все оказалось проще, и красивые ссылки не нужны (но если включить, то не мешают).


Решение проблемы

Итак, на странице официальной документации по Yii 2 написано, что для активации тулбара надо в конфигурации добавить блок

'bootstrap' => ['debug'],
'modules' => [
    'debug' => [
        'class' => 'yii\debug\Module',
        'allowedIPs' => ['1.2.3.4', '127.0.0.1', '::1']
    ]
]

На самом же деле в файле config/web.php уже есть необходимый блок, он выглядит вот так:

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = [
        'class' => 'yii\debug\Module',
    ];

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
    ];
}

Здесь надо добавить строку, в которой будет задан список IP-адресов, на которых будет работать дебаггер:

$config['modules']['debug']['allowedIPs'] = ['192.168.22.45', '192.168.22.46', '192.168.1.12'];

При задании ограничений можно использовать маски, то есть, чтобы позволить видеть дебаггер с любого компьютера, достаточно написать:

$config['modules']['debug']['allowedIPs'] = ['*'];

У меня же, в целях хоть какой-то безопасности, указано:

$config['modules']['debug']['allowedIPs'] = ['192.168.*'];

Итого, приведенный выше блок должен иметь вот такой вид (с учетом вашего списка IP-адресов):

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = [
        'class' => 'yii\debug\Module',
    ];
    $config['modules']['debug']['allowedIPs'] = ['192.168.*'];

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
    ];
}

После внесенных изменений дебаггер появляется.

Кстати, дебаггер в Yii 2 - это не только тублар внизу экрана. Можно зайти по адресу /index.php?r=debug (/debug/ при включенных "красивых" УРЛах), и увидеть мощный инструмент отладки, в котором есть очень полезных утилит, включая логи Yii 2, логи обращений к БД и профилировщик. (Чтобы открыть дебаггер, не обязательно вводить адрес вручную - достаточно кликнуть на одной из информационных надписей в тулбаре дебаггера, к примеру - на времени генерации страницы.)

4 комментария :

  1. Для активации Gii надо сделать такие же корректировки, то есть строки конфига для Gii будут выглядеть как:

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii']['class'] = 'yii\gii\Module';
    $config['modules']['gii']['allowedIPs'] = ['192.168.*'];

    Актуально для Yii 2.0.4, который крутится на виртуальной машине с Ubuntu Server 14.04 LTS и PHP 5.5.9.

    ОтветитьУдалить
  2. Хорошая статья, очень помогла разобраться.

    Спасибо.

    ОтветитьУдалить
  3. Сделал как написано, но вылетает эксепшен:

    ReflectionException

    Class yii\debug\Module does not exist

    Не подскажете что может быть? Уже два дня не могу решить.

    ОтветитьУдалить
    Ответы
    1. Нет, с таким вроде пока не встречался.

      Но строка Class yii\debug\Module does not exist говорит о том, что ядро не смогло найти модуль отладки. То есть, либо путь указан неверно, либо модуль физически отсутствует. Стоит проверить визуально.

      Плюс вот тема на форуме была, может чем поможет - http://yiiframework.ru/forum/viewtopic.php?t=18421

      Удалить

Примечание. Отправлять комментарии могут только участники этого блога.