我正在使用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 }}
显示值。
答案 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,
]);
}