如何加载控制器功能并使用Symfony2在树枝标签中呈现它?

时间:2011-11-27 22:10:46

标签: symfony twig

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

这是我的功能:

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 }}

显示值。

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:23)

如果您有动态数据,可以使用ajax,但是从您的简要信息中我可以看到,您可以直接从您的视图中执行该控制器功能:

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

有关此内容的更多信息,请访问: http://symfony.com/doc/2.0/quick_tour/the_view.html,在嵌入其他控制器

答案 2 :(得分:9)

对于记录,在新版本中,您需要使用绝对URL:

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

答案 3 :(得分:7)

{{render(&#34; AcmeDemoBundle:Demo:topArticles&#34;,{&#39; num&#39;:10}))}}

答案 4 :(得分:4)

在Silex中我解决了这个问题:

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

如果您没有路线名称,可以使用URL:

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

如果使用URL,我们应该总是连接baseUrl。

答案 5 :(得分:2)

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,
    ]);
}