Zaznaczę od razu, że od niedawna zacząłem uczyć się Symfony 2. Wcześniej działałem w Zend 1.
Mam małe pytanie odnośnie zautomatyzowania generowania widoku w akcji w zależności od "request`a". Mam 3 przypadki do rozpatrzenia.
1) zwykły request użytkownika. Ładuje się akcja i generuje podstawowy widok który rozszerza jakiś tam "layout.html.twig",
2) ajax`owy request z formatem "json". Oczywiście widok ma się nie generować tylko przesłać dane w postaci JSON.
3) ajax`owy request z formatem "ajax". Najchętniej jakby zwracał widok: "akcja.ajax.twig".
w 1 przypadku mam widok o nazwie: 'akcja.html.twig', który includuje widok 'akcja.ajax.twig' i rozszerza 'layout.html.twig'.
W akcji mam taki oto kod:
//... if($request->get('_format') === 'html') { 'result' => $Result, 'form' => $Form->createView() ); if($request->isXmlHttpRequest()) { return $this->render('AccountBundle:Auth:login.ajax.twig', $response); } else { return $response; } } else { 'result' => $Result ))); }
I teraz w każdej akcji muszę mniej więcej robić podobne kroki jeśli chcę wykonywać 3 różne przypadki. W Zend 1 było to bardziej zautomatyzowane. W metodzie Zend_Controller_Action::init() mogłem uruchomić helper`a o nazwie 'AjaxContext', w którym podawałem różne formaty a w akcji mogłem tylko zwrócić zwykłego array`a. W przypadku formatu JSON nie musiałem używać funkcji json_encode() - automatycznie helper ją stosował. A w przypadku formatu 'ajax' automatycznie szukał layout`u o nazwie 'akcja.ajax.twig'
Czy w Symfony 2 istnieje podobna rzecz jak w Zend 2. Czy może jakiś inny sposób, który redukuje ilość kodu w części gdzie mamy zwracać response.
Z góry dzięki za wszelkie sugestie,
Pozdrawiam