Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从所有symfony';s控制器路由到细枝?_Php_Twig_Symfony - Fatal编程技术网

Php 如何从所有symfony';s控制器路由到细枝?

Php 如何从所有symfony';s控制器路由到细枝?,php,twig,symfony,Php,Twig,Symfony,以下是用例: 我有一个简单的菜单。 我在数据库中有一个城市列表,上面有城市的名字。我想得到所有的城市,并将它们添加到下拉菜单中 简单的方法是发送额外的数据,如城市阵列到细枝。但我有很多路线,我不认为每次重复抓取都是好的。这不好,对吧 public function testpageAction(){ $em = $this->getDoctrine()->getEntityManager(); $cities = $em->getReposit

以下是用例:

我有一个简单的菜单。 我在数据库中有一个城市列表,上面有城市的名字。我想得到所有的城市,并将它们添加到下拉菜单中

简单的方法是发送额外的数据,如城市阵列到细枝。但我有很多路线,我不认为每次重复抓取都是好的。这不好,对吧

 public function testpageAction(){
        $em = $this->getDoctrine()->getEntityManager();
        $cities = $em->getRepository('AppBundle:City')->findAll();
        return $this->render('appviews/testpage.html.twig',array('cities'=>$cities));
    }
有一个解决方案,但这是静态数据,因此它不是解决方案


我脑子里有一个计划,要创建一个在控制器方法之前运行的方法,并将数据发送到这些方法。但这似乎并不好,我相信有更好的办法来解决它

您可以使用方法getAllCities拥有CityController或BaseController,并将此控制器嵌入基础模板中

来自Symfony:

在某些情况下,您需要做的不仅仅是包含一个简单的模板。假设版面中有一个侧边栏,其中包含三篇最新文章。检索这三篇文章可能包括查询数据库或执行其他无法在模板中完成的繁重逻辑。 解决方案是简单地从模板中嵌入整个控制器的结果

大概是这样的:

class BaseController extends Controller
{
   public function getAllCities()
   {
       // make a database call or other logic
       // to get all cities
       $cities = ...;

       return $this->render(
           'cities.html.twig',
           array('cities' => $cities)
       );
   }
}
您的城市模板:

{# app/Resources/views/cities.html.twig #}
{% for city in cities %}
    <a href="#"> {{ city}} </a>
{% endfor %}
{# app/Resources/views/base.html.twig #}
<div id="sidebar">
    {{ render(controller(
       'AppBundle:Base:getAllCities'
    )) }}
</div>
{#app/Resources/views/cities.html.twig}
{城市中城市的百分比%}
{%endfor%}
在基本模板中:

{# app/Resources/views/cities.html.twig #}
{% for city in cities %}
    <a href="#"> {{ city}} </a>
{% endfor %}
{# app/Resources/views/base.html.twig #}
<div id="sidebar">
    {{ render(controller(
       'AppBundle:Base:getAllCities'
    )) }}
</div>
{app/Resources/views/base.html.twig}
{{渲染(控制器)(
'AppBundle:Base:getAllCities'
)) }}

WOW!Symfony太棒了!非常感谢你!