Почему, если я помещаю var_dump ($ view) в шаблон Symfony2 PHP, страница вылетает?

0

Я начал изучать Symfony2, я читаю книгу.

Мне было интересно узнать, какой экземпляр хранится внутри переменной $ view, доступной как вспомогательный var внутри шаблона Symfony, поэтому я сделал этот шаблон:

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html"/>
    <meta charset="utf-8"/>
    <title>PHP Template</title>
</head>
<body>
    Number: <strong><?= $number; ?></strong>
    <?php var_dump($view); exit;?>
</body>
</html> 

Но когда я выполняю страницу, браузер заходит и смотрит на Монитор активности, я вижу "Помощника Google Chrome", который исчерпывает процессор... Почему все это происходит?

Спасибо за внимание!

EDIT: это часть исходного результата:

 object(Symfony\Bundle\FrameworkBundle\Templating\TimedPhpEngine)#311 (14) { 
    ["stopwatch":protected]=> object(Symfony\Component\Stopwatch\Stopwatch)#204 (2) { 
    ["sections":"Symfony\Component\Stopwatch\Stopwatch":private]=> array(1) { ["__root__"]=> 
object(Symfony\Component\Stopwatch\Section)#203 (4) { 
["events":"Symfony\Component\Stopwatch\Section":private]=> array(1) { ["__section__.child"]=> 
object(Symfony\Component\Stopwatch\StopwatchEvent)#107 (4) { 
["periods":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(0) { } ["origin":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> float(1.41716199817E+12) 
["category":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> string(7) "section" 
["started":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(1) { [0]=> float(0) }}} 
["origin":"Symfony\Component\Stopwatch\Section":private]=> NULL 
["id":"Symfony\Component\Stopwatch\Section":private]=> NULL 
["children":"Symfony\Component\Stopwatch\Section":private]=> array(1) { [0]=> 
object(Symfony\Component\Stopwatch\Section)#106 (4) { 
["events":"Symfony\Component\Stopwatch\Section":private]=> array(25) { ["__section__"]=> 
object(Symfony\Component\Stopwatch\StopwatchEvent)#105 (4) { 
["periods":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(0) { } 
["origin":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> float(1.41716199817E+12) 
["category":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> string(7) "default" 
["started":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(1) { [0]=> float(0.1)}} 
["kernel.request"]=> object(Symfony\Component\Stopwatch\StopwatchEvent)#104 (4) { 
["periods":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(1) { [0]=> 
object(Symfony\Component\Stopwatch\StopwatchPeriod)#75 (3) { 
["start":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(0) 
["end":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(84) 
["memory":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(6553600) } } 
["origin":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> float(1.41716199817E+12) 
["category":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> string(7) "section" 
["started":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(0) { } } 
["Symfony\Component\HttpKernel\EventListener\ErrorsLoggerListener"]=> 
object(Symfony\Component\Stopwatch\StopwatchEvent)#103 (4) { 
["periods":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(3) { [0]=> 
object(Symfony\Component\Stopwatch\StopwatchPeriod)#102 (3) { 
["start":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(0) 
["end":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(10) 
["memory":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(6291456) } [1]=> 
object(Symfony\Component\Stopwatch\StopwatchPeriod)#101 (3) { 
["start":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(10) 
["end":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(10) 
["memory":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(6291456) } [2]=> 
object(Symfony\Component\Stopwatch\StopwatchPeriod)#100 (3) { 
["start":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(10) 
["end":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(10) 
["memory":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(6291456) } } 
["origin":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> float(1.41716199817E+12) 
["category":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> string(14) "event_listener" 
["started":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(0) { } } 
["Symfony\Component\HttpKernel\EventListener\DebugHandlersListener"]=> 
object(Symfony\Component\Stopwatch\StopwatchEvent)#99 (4) { 
["periods":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(1) { [0]=> object(Symfony\Component\Stopwatch\StopwatchPeriod)#98 (3) { ["start":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(10) ["end":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(10) ["memory":"Symfony\Component\Stopwatch\StopwatchPeriod":private]=> int(6291456) } } ["origin":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> float(1.41716199817E+12) ["category":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> string(14) "event_listener" ["started":"Symfony\Component\Stopwatch\StopwatchEvent":private]=> array(0) { } } ["Symfony\Component\HttpKernel\EventListener\Profile

Пожалуйста, исправьте меня, потому что я только предполагаю: этот механизм шаблонов PHP (как я видел из документов) умножает время, затрачиваемое на визуализацию шаблона, пока он его отображает, а компонент секундомера обрабатывает это поведение внутренне, так что механизм шаблона останавливается синхронизируя рендеринг только тогда, когда на самом деле заканчивается шаблон, но, как это ни парадоксально, он не будет завершен, потому что механизм шаблона будет изменяться снова и снова, пока шаблон отображает, таким образом, бесконечный цикл, я прав?

  • 1
    Используйте отладчик, такой как XDebug, вместо выгрузки тонны информации на страницу. Вероятно, существует большая иерархия объектов, которые выгружаются, и ваш браузер пытается отобразить множество текстовых представлений объектов.
  • 1
    Что касается вашего редактирования: я думаю, что секундомер для панели инструментов отладки symfony2, и я не думаю, что проблема лежит там. Вы просто не должны использовать print_r () или var_dump () в php, когда у вас есть сущности с двунаправленными отношениями, потому что эти команды должны быть примитивными для обнаружения рекурсии.
Показать ещё 1 комментарий
Теги:
templating

3 ответа

2

Я подозреваю, что представление имеет отношение к другому объекту, который отражает возврат к представлению и приводит к рекурсии.

Обычно в symfony вы можете использовать \Doctrine\Common\Util\Debug::dump($view) но я не уверен, что он доступен в PHP-шаблонах.

Id советует вам попробовать шаблоны для завивки, они потрясающие.

  • 0
    Да, я сейчас изучаю Twig, пожалуйста, проверьте мои изменения
2

Установите Xdebug: http://xdebug.org/docs/install

Или попробуйте это: https://github.com/raulfraile/LadybugBundle

  • 0
    Спасибо за ссылку, пожалуйста, проверьте мои изменения
0

Взгляните на новый вармоузел Symfony: https://github.com/symfony/var-dumper

Добавьте к своему композитору.json:

"require-dev": {
    ...,
    "symfony/var-dumper": "@dev"
}

Использование: дамп ($ var);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню