簡體   English   中英

symfony2 - 如何在每個頁面中全局檢索數據庫中的數據

[英]symfony2 -How to retrieve data from database globally in every page

我想從數據庫中的表中檢索Cities名稱,並將它們作為選項放在“layout.html.twig”中定義的選擇輸入(組合框)中。 我的所有觀點都擴展了'layout.html.twig',那么如何在每個頁面中訪問城市名稱?

[解]

我無法回復我的主題,我沒有太多的聲譽所以我編輯我的主題

我找到了解決方案,使用“嵌入式控制器”

  • 首先,我創建了一個動作來檢索所有城市名稱:

     public function listCitiesAction(){ // retreiving cities $entities = $this->getDoctrine()->getRepository("MedAdBundle:City")->findAll(); return $this->render('MedAdBundle:Ville:list_cities.html.twig', array('entities' => $entities)); } 
  • 此動作將list_cities.html.twig定義為:

     <select class="form-control"> {% for entity in entities %} <option>{{ entity.name}}</option> {% endfor %} </select> 
  • finnaly我編輯我的layout.html.twig

     <div> {{ render(controller('MedAdBundle:City:listCities'))}} </div> 

通過這種方式,我可以在我的應用程序的每個頁面中訪問城市組合框;)

另一個好方法是使用渲染

這允許您從layout.html.twig調用控制器

{{ render(controller("AcmeDemoBundle:Helper:citySelector")) }}

您也可以使用ESI緩存輸出。

我會采取這些步驟:

  • 編寫一個托管symfony實體字段的表單,該字段配置為使用Cities表
  • 將此表單定義為DIC中的服務
  • 定義一個twig擴展,公開一個函數以輸出表單HTML
  • 使用layout.html.twig中的twig函數,該函數由所有其他模板擴展

作為優化,我將看看如何將Doctrine與一些緩存系統(例如memcached)連接起來,以避免在每次頁面加載時訪問數據庫。

您可以在此處找到有關實體字段的文檔: http//symfony.com/doc/current/reference/forms/types/entity.html

使用Symfony文檔查找如何將表單定義為服務以及如何編寫自己的twig擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM