2014-01-20 54 views
5

假設我在網站上的多個位置發表評論。我如何創建類似 {{render_widget('comments',{「object」:object})}}?這將呈現與該對象的所有評論的形式和列表?Symfony如何使用PHP和樹枝創建可重複使用的小部件

+0

也許嘗試使用[service](http://symfony.com/doc/current/book/service_container.html)爲此? –

+0

然後將此服務傳遞給樹枝模板。 –

+0

@Victor請給我一個示例代碼。 :) – CappY

回答

5

創建服務:

// src/Acme/HelloBundle/Service/Widget.php 
namespace Acme\HelloBundle\Service; 

use Symfony\Component\DependencyInjection\ContainerInterface; 

class Widget 
{ 
    protected $container; 

    public function __construct(ContainerInterface $container) 
    { 
     $this->container = $container; 
    } 

    public function getComments() 
    { 
     $request = $this->container->get('request'); // use service_container to access request, doctrine, twig, etc... 
    } 
} 

聲明一個服務:

# src/Acme/HelloBundle/Resources/config/services.yml 
parameters: 
    # ... 
    my_widget.class: Acme\HelloBundle\Service\Widget 

services: 
    my_widget: 
     class:  "%my_widget.class%" 
     arguments: ["@service_container"] 
     # scope: container can be omitted as it is the default 

在控制器使用的服務:

namespace Acme\HelloBundle\Controller; 

class BlogController { 

    public function getPostAction($id) { 
     // get post from db 
     $widget = $this->get('my_widget'); // get your widget in controller 
     $comments = $widget->getComments(); // do something with comments 

     return $this->render('AcmeHelloBundle:Blog:index.html.twig', 
      array('widget' => $widget) // pass widget to twig 
     ); 
    } 
} 

或樹枝,如果你通過你的服務模板像render()以上功能:

#AcmeHelloBundle:Blog:index.html.twig 

{{ widget.getComments()|raw }} 

而且有用的閱讀有關How to work with Scopes

+0

我會嘗試。 :)我真的不喜歡在任何地方添加|原始過濾器...... – CappY

+0

如何在Twig中獲得服務的實例? – CappY

+0

我要,但是我還沒有找到一個建議,不要使用'| raw'過濾器。如果你發現 - 告訴我;) –

1

我已經做了另一種方式的文檔。我註冊嫩枝擴展與功能{{意見(對象)}}

的函數註冊這樣

'comments' => new \Twig_Function_Method($this, 'comments', array(
     'needs_environment' => true, 
     'is_safe' => array('html') 
      )) 

這樣,我也不需要指定|生的過濾器。

+0

什麼是'{{comments(object)}}'中的'object'? –

+0

變量? :D評論對象 – CappY

相關問題