2016-02-18 2 views
3

Я использую Symfony 2.8.0 (так как я нахожу Symfony 3.x не очень зрелым на данный момент, но давайте не будем вдаваться в это обсуждение прямо сейчас).Передача аргументов встроенному контроллеру в Symfony 2.8

В соответствии с официальной документацией (http://symfony.com/doc/2.8/book/templating.html#embedding-controllers) должно быть возможно передать аргументы встроенному контроллеру, вызванному из представления.

Однако это не работает. Я всегда в конечном итоге, за исключением следующего:

«контроллер„AppBundle \ Controller \ контроллера по умолчанию :: buildNavigationAction()“требует, чтобы вы обеспечиваете значение для„аргумента $ argument1“(потому что нет значения по умолчанию или потому что после этого есть необязательный аргумент). "

В мой взгляд, я следующий кусок кода:

{{ render(controller('AppBundle:Default:buildNavigation'), { 
    'argument1': 25, 
    'argument2': 50 
}) }} 

Контроллер выглядит следующим образом:

public function buildNavigationAction($argument1, $argument2) 
{ 
    // ... some logic ... 

    return $this->render(
     'navigation.html.twig', array(
      'foo' => $argument1, 
      'bar' => $argument2 
     ) 
    ); 
} 

Что это дает? Это ошибка?

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

+0

Он также не работает, чтобы получить аргументы через $ argument1 = $ request-> query-> Get ('argument1'); Значения остаются пустыми. Их просто не пропускают вообще, так кажется. –

ответ

2

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

{{ render(controller('AppBundle:Default:buildNavigation', { 
    'argument1': 25, 
    'argument2': 50 
})) }} 
+1

спасибо за быстрый и очень правильный ответ. Оно работает! –

+0

Ничего страшного, это непростая задача, и трудно найти –

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