layout.html.twig中如果有公共部分例如側邊欄 需要查詢資料操作顯示出來,怎麼操作比較好啊?
http://symfony.cn/docs/quick_tour/the...
兩種方法:
一、把 layout 中需要從資料庫讀取資料的地方單獨分離一個 .twig 檔案(如 test.twig),在 layout 中使用 render Controller 方法:
{{ render(controller('AppBundle:ControllerName:MethodName', { 'params': 3 })) }}
在 ControllerName::MethodName 裡 render test.twig 檔案:
public function MethodName($params) { $repository = $this->get('doctrine.orm.entity_manager') ->getRepository('AppBundle:EntityName'); return $this->render('AppBundle:ControllerName:test.twig', array( 'result' => $repository->findByParams($params) )); }
二、利用 KernelResponse 事件動態加入全域變數
public function __construct(ContainerInterface $container) { // container 需要通过 service.yml 注入 $this->container = $container; } public function onKernelResponse() { $twig = $this->container->get('twig'); $em = $this->container->get('doctrine.orm.entity_manager'); $repository = $em->getRepository('AppBundle:EntityName'); $twig->addGlobal('result', $repository->findByParams()); }
只寫了核心程式碼,你還需要設定 service
http://symfony.cn/docs/quick_tour/the...
兩種方法:
一、把 layout 中需要從資料庫讀取資料的地方單獨分離一個 .twig 檔案(如 test.twig),在 layout 中使用 render Controller 方法:
在 ControllerName::MethodName 裡 render test.twig 檔案:
二、利用 KernelResponse 事件動態加入全域變數
只寫了核心程式碼,你還需要設定 service