Функция дампа 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.
Пока что кажется, что контрольный список для решения этой проблемы будет выглядеть примерно так:
- Убедитесь, что установлена последняя версия xdebug
- Если это не помогло, попробуйте увеличить ограничение памяти PHP