2011-11-27 39 views
18

我正在使用Symfony2和Twig。我在我的控制器中有一个函数(在下面)返回一个特定的文本。是否可以直接从我的模板调用该函数,并将模板中的{{text}}更改为函数返回的内容,可能通过Ajax?如何使用Symfony2加载控制器函数并将其呈现在树枝标签中?

这里是我的功能:

public function generateCode($url) { 
    $url = $_SERVER['SERVER_NAME'] . '/embed/' . $url; 
    $return = '<iframe>'.$url.'</iframe>'; 
    return $return; 
} 

另一个控制器功能调用上面的功能,使我的模板:

public function getCodeAction($url) { 
    $text = $this->generateCode($url); 
    return $this->render('MyMyBundle:User:code.html.twig', array('text' => $text)); 
} 

在我的模板,我使用:

{{ text }} 

显示价值。

回答

22

您可以使用AJAX,如果您有动态数据,但据我可以从你简短的信息看,你总是可以直接从您的视图下执行该控制器的功能:

{% render "MyMyBundle:User:generateCode" with { 'url': 'your url here' } %} 

在此提供更多信息在: http://symfony.com/doc/2.0/quick_tour/the_view.html,嵌入其他控制器

+0

感谢。它的工作原理是,我只需要使用渲染方法 - 现在即使是Ajax也能顺利运行。谢谢! – Mike

+3

@Mike你玩什么意思? – k0pernikus

36

在Symfony 2.2中,这已更改。

渲染标记签名和参数已更改。

前:

{% render 'BlogBundle:Post:list' with { 'limit': 2 }, { 'alt': BlogBundle:Post:error' } %}

后:

{% render controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error' } %}

{{ render(controller('BlogBundle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBundle:Post:error'}) }}

注:该功能的首选方式。

https://github.com/symfony/symfony/blob/2.2/UPGRADE-2.2.md

+13

以避免任何混淆:'{{render(controller(...}}'是函数 –

9

根据记录,在新版本中,你需要使用绝对网址:

{{ render url('my_route_id', {'param': value}) }} 
+1

这个答案应该被标记为正确 – Chris

+1

这是不正确的。{{}}不是{%%} – RichieHH

7

{{渲染(控制器( “AcmeDemoBundle:演示:topArticles”,{” NUM':10}))}}

4

在Silex的我解决了它这样的:

{{ render(url('route_name', {'param': value})) }} 

如果你不具备路由名称,网址,可以用:

{{ render(app.request.baseUrl ~ '/some-path/' ~ value) }} 

如果使用的网址,我们要始终CONCAT的的baseUrl。

1

Symfony 2。6+

在树枝:

{{ render(controller('AppBundle:PropertySearch:featuredProperties', {'limit': 15})) }} 

控制器:

/** 
* featuredPropertiesAction 
* 
* @param Request $request 
* @param int $limit 
* 
* @return Response 
*/ 
public function featuredPropertiesAction(Request $request, $limit) 
{ 
    $search = $this->resultsHelper->featuredSearch($limit); 

    return $this->render('HASearchBundle::featured_properties.html.twig', [ 
     'search' => $search, 
    ]); 
} 
相关问题