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, логи обращений к БД и профилировщик. (Чтобы открыть дебаггер, не обязательно вводить адрес вручную - достаточно кликнуть на одной из информационных надписей в тулбаре дебаггера, к примеру - на времени генерации страницы.)

12 комментариев :

  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. Анонимный12 июля 2015 г., 23:49

    Хорошая статья, очень помогла разобраться.

    Спасибо.

    ОтветитьУдалить
  3. Анонимный27 июля 2015 г., 13:29

    Сделал как написано, но вылетает эксепшен:

    ReflectionException

    Class yii\debug\Module does not exist

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

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

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

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

      Удалить
    2. Please check the composer.json file in the root of your yii2 project, and make sure that the following lines are present in the require-dev section of the composer file: "yiisoft/yii2-debug": "~2.0" and "yiisoft/yii2-gii": "~2.0".

      Then run ´composer update´ in the root of your ptoject.

      Удалить
  4. Спасибо Александр! Выручили)

    ОтветитьУдалить
  5. Спасибо за вашу статью! Сэкономило немного времени

    ОтветитьУдалить
  6. Анонимный26 июля 2016 г., 23:32

    При добавлении $config['modules']['debug']['allowedIPs'] = ['192.168.*'];
    вылетала ошибка "Class Aii\debug\Module does not exist"

    Вот тут (https://github.com/yiisoft/yii2/issues/6795) нашел ответ:

    $config['modules']['debug'] = [
    'class' => 'yii\debug\Module',
    'allowedIPs' => ['192.168.*']
    ];

    ОтветитьУдалить
  7. Спасибо, сэкономили время :)

    ОтветитьУдалить
  8. Спасибо, статья очень помогла

    ОтветитьУдалить