Почему функция ' dump` не существует в файле twig?

Я не знаю, почему он показывает эту ошибку

The function "dump" does not exist in twig file

в то время как я уже писал в :

services:
product_store.twig.extension.debug:
    class: Twig_Extension_Debug
    tags:
         - { name: 'twig.extension' }

и в файле twig я пытаюсь сбросить с:

{{ dump(product) }}

4 ответов


ответ от lifo призывает вас использовать debug тег, а debug tag {% debug product %} был устаревшим в Twig 1.5 и заменен на dump функции {{ dump(product) }}.

правильным расширением для включения с Symfony Standard Edition 2.0.9 является Twig_Extension_Debug и должен быть добавлен в app/config/config_dev.yml таким образом, он загружается только в среде dev:

services:
    twig.extension.debug:
        class: Twig_Extension_Debug
        tags: [{ name: 'twig.extension' }]

затем вы должны быть в состоянии использовать {{ dump(product) }} в вашей шаблоны.

если проблема все еще существует, вы можете попробовать несколько вещей:

  1. использовать php app/console container:debug twig.extension.debug --env=dev чтобы убедиться, что контейнер инъекции зависимостей правильно подбирает ваше определение службы.

    [container] Information for service twig.extension.debug
    
    Service Id       twig.extension.debug
    Class            Twig_Extension_Debug
    Tags
        - twig.extension                 ()
    Scope            container
    Public           yes
    Synthetic        no
    Required File    -
    
  2. откройте скомпилированный класс контейнера инъекций зависимостей для среды разработки и выполните поиск Twig_Extension_Debug чтобы увидеть, если какой-либо другой сервис уже был определен для его использования. Этот файл живет в app/cache/dev/appDevDebugProjectContainer.php

  3. убедитесь, что параметр %kernel.debug% - это правда.

  4. убедитесь, что вы используете Twig 1.5 или более поздней версии.


во-первых, "дамп" на самом деле не команда, его "отладка". Во-вторых, ваш синтаксис конфигурации немного испорчен. Это должно выглядеть примерно так:

services:
    twig.extension.debug:
        class: Twig_Extensions_Extension_Debug
        tags:
            - { name: twig.extension }

тогда вы можете использовать его в своих шаблонах следующим образом:{% debug var %} -- обратите внимание на фигурные скобки { % % }. Debug не работает в фигурных скобках {{}}, потому что это тег, а не функция.


может быть, причина в том:

куда вы положили

services:
  product_store.twig.extension.debug:
  class:        Twig_Extension_Debug
  tags:
     - { name: 'twig.extension' }

он должен быть в конфигурации.yml вашего boundle в:

nameOfTheBoundle/Resources/config/config.yml

, а не в config.в формате YML из projeft в:

app/config/config.yml

принятый ответ не работа для меня. Все, что мне нужно было сделать, это включить DebugBundle в AppKernel (только в средах разработки / тестирования):

$bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();

и это все. Нет необходимости регистрировать какие-либо услуги.