Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Frameworki _ [Symfony][Symfony4] Jak wyświetlić kilka szablonów twig w jednej metodzie w kontrolerze

Napisany przez: thepiotr 28.01.2019, 10:28:34

Chodzi mi o coś takiego:

  1. http://www.php.net/echo $this->render('strona/header.html.twig');
  2. http://www.php.net/echo $this->render('podstrona/index.html.twig');
  3. http://www.php.net/echo $this->render('strona/footer.html.twig');


Jednakże z echo występuje błąd "The controller must return a "Symfony\Component\HttpFoundation\Response" object but it returned null. Did you forget to add a return statement somewhere in your controller?"
A jeśli zamiast ostatniego echo dam return, czy to będzie dobrze? (wtedy niby nie ma tego błędu)
No ale może też jest jakiś prostszy sposób żeby to zrobić?

Napisany przez: Lord 28.01.2019, 10:49:47

Cytat(thepiotr @ 28.01.2019, 11:28:34 ) *
Chodzi mi o coś takiego:
  1. http://www.php.net/echo $this->render('strona/header.html.twig');
  2. http://www.php.net/echo $this->render('podstrona/index.html.twig');
  3. http://www.php.net/echo $this->render('strona/footer.html.twig');


Jednakże z echo występuje błąd "The controller must return a "Symfony\Component\HttpFoundation\Response" object but it returned null. Did you forget to add a return statement somewhere in your controller?"
A jeśli zamiast ostatniego echo dam return, czy to będzie dobrze? (wtedy niby nie ma tego błędu)
No ale może też jest jakiś prostszy sposób żeby to zrobić?


tak dziwnie z tymi szablonami ogólnie to raczej po stronie twiga powinno sie "łaczyć" różne szablony a jak chcesz coś nadpisać w szablonie to masz extends
https://twig.symfony.com/doc/2.x/tags/include.html
https://twig.symfony.com/doc/2.x/tags/extends.html

Napisany przez: sabat24 28.01.2019, 11:22:21

Na siłę możesz zrobić coś takiego (nie testowałem tego, ale na oko powinno działać)

  1. $html = $this->render('strona/header.html.twig')->getContent();
  2. $html .= $this->render('podstrona/index.html.twig')->getContent();
  3. $html .= $this->render('strona/footer.html.twig')->getContent();
  4.  
  5. $response = new Response();
  6. $response->setContent($html);
  7. return $response;

Napisany przez: ohm 28.01.2019, 20:40:00

Zadnego echo, zadnego renderowania po kawałku, robisz w twigu główny szablon (np base.html.twig) i w nim wrzucasz wszystkie rzeczy które są Ci potrzebne w blokach, czyli np header, body, footer. Następnie zwracasz na danej akcji return $this->render('podstrona.html.twig') i w podstrona.html.twig robisz zwykly extend do base.html.twig, nastepnie nadpisujesz block body.
Trochę to może się wydawać niezbyt jasne jeśli nie miałeś styczności z twigiem, ale ogólnie wszystko co potrzebne masz w
https://symfony.com/doc/current/templating/inheritance.html i https://symfony.com/doc/current/templating.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)