簡體   English   中英

Symfony2-Twig渲染控制器並返回數組響應

[英]Symfony2 - Twig render controller and return array response

注意 :我在這里所做的是嵌入控制器 <---看到類似的(官方)示例鏈接。

我想從樹枝模板調用一個控制器,並讓該控制器返回一個數組 ,然后可以在其余模板中使用該數組

我可以使用單個變量來做到這一點:

枝條

{% set testVar = render(controller('AppBundle:Test:index')) %}

控制者

class TestController extends Controller
{
    public function testAction()
    {
        return new Response('OH HAI');
    }
}

但是,以下內容引發異常:( ("The Response content must be a string or object implementing __toString(), "array" given.") 具有相同的twig文件

public function testAction()
{
    return new Response(array('test' => 1, 'foo' => 'bar'));
}

這將引發上述異常 如何在不創建虛擬的,無用的額外模板供控制器渲染的情況下完成我要尋找的目標?

實現所需目標的標准方法如下所示。

假設您有常規操作。 例如。

class TestController extends Controller
{
    public function testAction()
    {
        return $this->render('AppBundle:Test:index.html.twig');
    }
}

和模板:

<html>
    <body>
        {% block sidebar %}
            {{ controller('AppBundle:Test:sidebar') }}
        {% endblock %}
        {% block content %}
            Hello world
        {% endblock %}                    
    </body>
</html>

接下來,您需要為邊欄創建一些操作。 請注意,這樣可以避免在視圖層中放置任何邏輯。

class BaseController extends Controller
{
    public function sidebarAction()
    {
        $status = $this->get('some.status.logic')->retrieveStatus();

        return $this->render('AppBundle:Base:sidebar.html.twig', array(
            'status' => $status,
        ));
    }
}

還有您的Base/sidebar.html.twig

<div class="sidebar">
   {{ status.showStatusInfo() }}
</div>

就這樣。 您不會以這種方式破壞MVP,因為視圖層中仍然沒有任何邏輯(側邊欄的邏輯在BaseController )。

暫無
暫無

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

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