Контроллер не отображает шаблон

Я использую пакет FOS для реализации REST API в symfony.

У меня есть контроллер под названием termsController, в котором я реализовал все маршруты для REST API.

Маршруты для put,get,post и delete возвращают массив, но я хочу, чтобы функция newTermAction (чей маршрут был бы /terms/new ) отображала шаблон.

То есть этот маршрут должен вести к форме, откуда я делаю почтовый вызов

Но шаблон не отображается, и на выходе получается необработанный html-код.

Вот функция

public function newTermsAction()
  {

    return $this->render('default/termForm.html.twig');
  }

Файл config.yml

sensio_framework_extra:
    view:   {   annotations: false }
    router: {   annotations: true }

fos_rest:
    param_fetcher_listener: true
    body_listener: true
    format_listener: true
    view:
        view_response_listener: 'force'
        formats:
            xml: true
            json : true
        templating_formats:
            html: true
        force_redirects:
            html: true
        failed_validation: HTTP_BAD_REQUEST
        default_engine: twig
    routing_loader:
        default_format: json

Я пытался использовать это, но это не работает

$view = $this->view()
            ->setTemplate("TermsBundle:Default:termForm.html.twig");
    return $this->handleView($view);

Error : Attempted to call an undefined method named \"view\" of class

person user3425344    schedule 22.07.2015    source источник


Ответы (1)


Попробуйте что-то вроде этого:

public function newTermsAction(){
    $view = $this->view(null, 200)
        ->setTemplate('default/termForm.html.twig')
    ;

    return $this->handleView($view)
}

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

EDIT: проблема заключалась в том, что контроллер неправильно наследовал FOSRestController, это правильный способ сделать это.

Кроме того, не забудьте добавить формат html в конце запроса, иначе контроллер попытается отобразить формат по умолчанию, установленный в конфигурации, например. :

terms/new.html
person AntoineWDG    schedule 22.07.2015
comment
Я попробовал это. Получил ошибку: Попытка вызвать неопределенный метод с именем \view\ класса .... - person user3425344; 22.07.2015
comment
Ваш контроллер наследует FOS\RestBundle\Controller\FOSRestController? (извините, я не видел, чтобы вы упомянули об этом в своем вопросе, попробуйте добавить ошибку в вопрос) - person AntoineWDG; 22.07.2015
comment
Странно, у FOSRestController есть метод просмотра, не могли бы вы привести полный код контроллера (опуская другие действия) и полную ошибку в вопросе? - person AntoineWDG; 22.07.2015
comment
это полный код контроллера. Этот контроллер ничего не делает, кроме рендеринга шаблона - person user3425344; 22.07.2015
comment
Что ж, контроллер — это класс, я хотел бы увидеть определение класса. - person AntoineWDG; 22.07.2015
comment
Давайте продолжим обсуждение в чате. - person user3425344; 22.07.2015