在 Twig 模板中使用 Symfony2 控制器返回

Posted

技术标签:

【中文标题】在 Twig 模板中使用 Symfony2 控制器返回【英文标题】:Using Symfony2 controller return in Twig template 【发布时间】:2014-11-28 14:16:42 【问题描述】:

在 Symfony2 中,我如何在 Twig 文件中获取控制器变量或返回...?即我有一个返回结果数组的函数,我想在 twig 文件中显示这些结果......?

php 控制器:

<?php

namespace TalkTalk\NewsInfrastructure\Sitemap\Factory;

use TalkTalk\NewsInfrastructure\Article\Factory\DbArticleReadRepository;
use TalkTalk\NewsInfrastructure\DatabaseRepository;

Class SitemapFactory extends DatabaseRepository

    /**
     * @var string
     */
    private $baseUrl = 'news/';

    /**
     * @var string
     */
    private $feedsSlug;

    /**
     * @var string
     */
    private $articleSlug;

    /**
     * @var string
     */
    private $siteMap;

    /**
     * @array URLforSitemap[]
     */
    private $urls = array();

    /**
     * @return mixed
     */
    public function getURLs()
    
         $this->urls = $this->db->createQueryBuilder()
        ->select('faf.article_id', 'faf.feed_id')
        ->addSelect('f.slug AS feedSlug')
        ->addSelect('a.slug AS articleSlug')
        ->addSelect("CONCAT('news/' , f.slug, '/' , a.slug) AS url")
        ->from('article_feeds', 'faf')
        ->leftJoin('faf', 'articles', 'a', 'faf.article_id = a.id')
        ->leftJoin('faf', 'feeds', 'f', 'faf.feed_id = f.id');

         return $this->urls->execute()->fetch(\PDO::FETCH_OBJ);
    

    public function setSiteMap()
    

        $this->siteMap = '<?xml version="1.0" encoding="UTF-8"?>';
        $this->siteMap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

        foreach($this->urls as $url)

            $this->siteMap .= '<url>';
            $this->siteMap .= '<loc>'.$url.'</loc>';
            $this->siteMap .= '<lastmod>2014-11-26</lastmod>';
            $this->siteMap .= '<changefreq>daily</changefreq>';
            $this->siteMap .= '<priority>0.5</priority>';
            $this->siteMap .= '<url>';

        

        echo $this->siteMap .= '</urlset>';

    

    public function getSiteMap()
    
        return $this->siteMap;
    

树枝文件(目前):

# src/TalkTalk/NewsInfrastructure/Sitemap/Views/sitemap.twig #
<! DOCTYPE html>

<html>
<head>
    % block head %
    <title>% block title %Sitemao% endblock % </title>
    % endblock %
</head>

<body>

    <h1> Sitemap </h1>

    <ul>
        % foreach test as url %
            <li>  </li>


    </ul>


</body>
</html>

我现在可以在函数括号 % % 之间的 twig 中使用 for 循环,并在这些括号 之间显示结果,但是我如何将控制器的结果带入 twig 文件...?

【问题讨论】:

第一个文件实际上不是控制器... 嗯,它是一个工厂类...带有 set/get 方法,那么我如何将这些返回传递到树枝模板中 也许发布你的控制器而不是工厂——然后人们可以告诉你要编辑你的代码的哪一部分。 这是一个工厂/控制器,这个工厂没有不同的控制器.....? 【参考方案1】:

您最好阅读 Symfony2 的手册。 This part covers the views 以及如何使用它们,这应该可以帮助您入门。

【讨论】:

所以如果我这样做 `` public function setTwig() $this->render('../View/sitemap.twig', array($this->urls));

以上是关于在 Twig 模板中使用 Symfony2 控制器返回的主要内容,如果未能解决你的问题,请参考以下文章

在 TWIG 模板中获取控制器名称

如何在 symfony2 中从数据库中渲染 Twig 模板

Symfony2 twig 移动模板后备

使用 Symfony2/Twig 创建引导轮播

Symfony2 Assetic + Twig 模板 JavaScript 继承

Symfony2 中的 Twig CamelCase 过滤器