2013-07-19 3 views
1

настоящее время я получаю очень проводное исключение прут:Symfony 2 - отсутствуют обязательные параметры исключения на веточке распространяется

Если я использую прут {% extends 'some:template' %}, я получаю следующее исключение: прут

An exception has been thrown during the rendering of a template ("The "_projectView" route has some missing mandatory parameters ("id").") in "xy:Project:view.html.twig". 

Но если я удалю {% extends 'some:template' %}, шаблон отображается правильно - это для моей части исключает любые проблемы с маршрутизацией или контроллером, это должно быть проблемой с шаблоном, но я не могу понять это. В родительских шаблонах не используются переменные.

+0

Почему вы хотите расширить ''? Эта функция ожидает строку. Если вы не хотите распространять другой шаблон, не добавляйте тег расширения. Или это только для демонстрации целей? – UrGuardian4ngel

+0

Да, плохой выбор ... В моей реальной реализации есть, конечно, правильный путь шаблона, я просто оставил его в примере. – wowpatrick

ответ

7

Внутри шаблона, который вы пытаетесь расширить, вы пытаетесь создать URL-адрес маршрута «_projectView», но вы не предоставляете все необходимые параметры.

Либо добавить идентификатор по умолчанию в маршрут ...

route_name: 
    pattern: /whatever/{id} 
    defaults: { id: 1 } 

... или сделать что-то вроде этого в шаблоне:

{{ path('route', { 'id' : entity.id|default('1') }) }} 
+0

Спасибо за ваш ответ! Просто чтобы подтвердить: если это так, каждая страница, которая расширяет данный шаблон, должна показывать одно и то же исключение? Самое смешное, что я __only__ получаю ошибку на шаблоне 'view', на который указывает маршрут. Страница, которая ссылается на страницу просмотра, которая содержит путь, как вы упомянули, работает отлично ... – wowpatrick

1

Довольно просто, чтобы правильно отобразить, каждый сучок должен иметь все необходимые ему переменные. Они либо находятся в URL-адресе, либо передаются в функцию рендеринга. Если какая-либо из этих переменных отсутствует, Symfony выдает эту ошибку.

Учитывая, что вы сказали, мне кажется, что веточка, которую вы распространяете, имеет переменную в ней, которую она хочет. Во всех других местах, где вы расширили эту ветку, вы указали эту переменную уже либо в URL-адресе, либо в одном из родительских веток, и поэтому он не жаловался. В этом случае вы пытаетесь использовать его, и эта переменная отсутствует. Поэтому он жалуется.

Убедитесь, что ваш маршрут проходит в правой переменной или ваш контроллер передает правильную переменную в функцию рендеринга.

Смежные вопросы