如何使用 Symfony2 加载控制器函数并将其渲染在 twig 标签中?

发布于 2024-12-18 02:12:51 字数 620 浏览 4 评论 0原文

我正在使用 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 }}

显示值。

I am using Symfony2 and Twig. I have a function (below) in my controller that returns a specific text. Is it possible to call that function directly from my template and change the {{text}} in my template to whatever the function returns, possibly via Ajax?

Here's my function:

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

Another controller function calls the function above and renders my template:

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

In my template I am using:

{{ text }}

to display the value.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

椒妓 2024-12-25 02:12:51

在 Symfony 2.2 中,这一点发生了变化。

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

之前:

{% 渲染 'BlogBu​​ndle:Post:list' with { 'limit': 2 }, { 'alt': BlogBu​​ndle:Post:error' } %}

之后:

{% 渲染控制器('BlogBu​​ndle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBu​​ndle:Post:error' } %}

{{ render(controller('BlogBu​​ndle:Post:list', { 'limit': 2 }), { 'alt': 'BlogBu​​ndle:Post:error'}) }}< /p>

注意:函数是首选方式。

请参阅 https://github.com/symfony/symfony/blob/2.2/升级-2.2.md

In Symfony 2.2, this was changed.

The render tag signature and arguments changed.

Before:

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

After:

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

or

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

Note: The function is the preferred way.

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

驱逐舰岛风号 2024-12-25 02:12:51

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

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

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

You can use ajax if you have dynamic data, but as far as I can see from your brief info, you can always execute that controller function directly from your view:

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

More Information on this available at:
http://symfony.com/doc/2.0/quick_tour/the_view.html, under Embedding other Controllers

高跟鞋的旋律 2024-12-25 02:12:51

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

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

For the record, in new versions you need to use the absolute URL:

{{ render url('my_route_id', {'param': value}) }}
不寐倦长更 2024-12-25 02:12:51

{{ render(controller("AcmeDemoBundle:Demo:topArticles", {'num': 10})) }}

{{ render(controller("AcmeDemoBundle:Demo:topArticles", {'num': 10})) }}

愿得七秒忆 2024-12-25 02:12:51

在 Silex 中,我是这样解决的:

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

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

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

如果使用 URL,我们应该始终连接 baseUrl。

In Silex I solved it like this:

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

If you do not have the route name, URL can be used:

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

If using URL we should always concat the baseUrl.

深巷少女 2024-12-25 02:12:51

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

Symfony 2.6+

in twig:

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

controller:

/**
 * 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,
    ]);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文