W rozdziale NIESTANDARDOWE ROZSZERZENIE TWIG pokazałem w jaki sposób dodać do szablonu własne filtry i funkcje. Aby pobrać obiekt z bazy wystarczy dobrać się do interfejsu Menadżera Encji – EntityManagerInterface (z pakietu Doctrine).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php // ... use Doctrine\ORM\EntityManagerInterface; class AppExtension extends AbstractExtension { private $em; public function __construct(EntityManagerInterface $em) { $this->em = $em; } // ... } |
W konstruktorze ustawiam uchwyt $this->em i mogę użyć np: repozytorium:
1 |
$this->em->getRepository(Entity::class)->find($id) |
A reszta to już pikuś 😉
Dla przykładu dodam funkcję getPost($id), która zwróci obiekt Post o wskazanym id :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php // src/Twig/AppExtension.php namespace App\Twig; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; use Doctrine\ORM\EntityManagerInterface; use App\Entity\Post; // przykładowa klasa, z której będą pobierane dane class AppExtension extends AbstractExtension { private $em; public function __construct(EntityManagerInterface $em) { $this->em = $em; // uchwyt do Menadżera Encji } public function getFunctions() { return array( new TwigFunction('post', array($this, 'getPost')), ); } public function getPost($id) { $post = $this->em->getRepository(Post::class)->find($id); return $post; } } |
Wywołanie funkcji w szablonie Twig:
1 |
{{ post(id) }} |
– z konkretną wartością, np: id = 2 – zakładając, że istnieje w tabeli 🙂 :
1 |
{{ post(2) }} |