Функция дампа Twig возвращает пустой экран

Я использую функцию дампа Twig в Symfony2. Я настроил Symfony в соответствии с его инструкциями.

у меня есть page переменная и orders массив. dump работает на странице, но не заказы. Когда я звоню по заказам, я получаю белый экран - никаких ошибок php или чего-то еще. Я понятия не имею, как отладить это.

Есть идеи?

4 ответа

Решение

Небольшое объяснение

Белый (пустой) экран в этом случае означает фатальную ошибку PHP: допустимый объем памяти исчерпан. Во время моего расследования я обнаружил странную вещь: прутик использует var_dump функция, пока у меня установлен компонент VarDumper.

Я думаю, что это сделано для работы в случае, если VarDumper не установлен, но веточка dump() функция, описанная в документации к компоненту Symfony VarDumper, как сложное решение, это странно.

Итак, используя VarDumper's dump() функция вместо родной var_dump() решает проблему с памятью (поскольку VarDumper ограничивает сбор результирующего дампа достаточным количеством). Также VarDumper's dump() дать более удобный результат - вы можете нажать на листьях дерева, чтобы показать / скрыть его содержимое.

Что именно нужно сделать

  • Установите компонент VarDumper, если не установлен
  • Перейти к файлу: vendor/twig/twig/lib/Twig/Extension/Debug.php
  • найти twig_var_dump функция
  • Заменить все var_dump() звонки в dump()
  • Удалить / комментарий ob_start() + ob_get_clean() строительство (которое необходимо, если вы используете var_dump() как это повторяет данные, но dump() действуя умнее)

ИЛИ ЖЕ

копировать + заменить всю функцию, используя это;)

function twig_var_dump(Twig_Environment $env, $context)
{
    if (!$env->isDebug()) {
        return;
    }

//    ob_start();

    $count = func_num_args();
    if (2 === $count) {
        $vars = array();
        foreach ($context as $key => $value) {
            if (!$value instanceof Twig_Template) {
                $vars[$key] = $value;
            }
        }

        dump($vars);
    } else {
        for ($i = 2; $i < $count; $i++) {
            dump(func_get_arg($i));
        }
    }

//    return ob_get_clean();
}

PS: вопрос задан в 2013 году, но я надеюсь, что это поможет, потому что у меня была эта проблема сейчас.

Мой контекст:

"symfony/symfony": "2.5.*"
"symfony/var-dumper": "~2.6"

У меня была та же проблема, увеличение памяти до 1 ГБ не помогло. В моем случае я хочу позвонить

    {{ dump() }} 

без параметров (чтобы увидеть все доступные переменные в контексте текущего шаблона. В моем случае помогло следующее: /questions/41438831/est-li-polnyij-spisok-peremennyih-kotoryie-mozhno-ispolzovat-v-formdivlayouthtmltwig/41438843#41438843, хотя проблема memory_limit по-прежнему сохраняется)

Скорее всего, вы достигли предела памяти PHP. Попробуйте увеличить его в php.ini

Ответ Аркемлара работает нормально.

НО

после этого twig dump() вызывал исключение RuntimeException в функциональном тесте с phpunit в моем случае.

Вероятно, нет однозначного ответа на эту проблему, так как ряд причин может вызвать его. Как и другие люди, увеличение лимита памяти для PHP может помочь. В моем случае это не помогло, однако я смог решить проблему, установив xdebug.

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

  1. Убедитесь, что установлена ​​последняя версия xdebug
  2. Если это не помогло, попробуйте увеличить ограничение памяти PHP
Другие вопросы по тегам