【问题标题】:Using doctrine database object in a template在模板中使用原则数据库对象
【发布时间】:2013-10-02 14:07:22
【问题描述】:

我是 Symfony 的新手,终于开始了解如何使用 Doctrine 查询数据库。但是,我对如何在 Twig 模板中使用数据库对象内容一无所知。

假设我的数据库对象包含 50 种不同产品的产品 ID、名称、价格。在控制器中查询完数据库后,我执行以下操作,将数据库对象传递到 Twig 模板中:

public function searchAction($word)
{
      //query database using the $word slug and prepare database object accordingly

      $dataObject; // contains query results
      return $this->render('GreatBundle:Default:search.html.twig', array('word' => $word));
}

这就是我卡住的地方。现在我有一个 Twig 模板,我想从控制器传递 DB 对象,然后在我的 Twig 模板中打印出数据库数据。

感谢任何有关如何完成此任务的建议。

非常感谢!

【问题讨论】:

    标签: symfony frameworks doctrine-orm doctrine twig


    【解决方案1】:

    我会用一个例子来回答(我更容易解释)

    您想使用 slug 搜索某些内容(示例中的 var $word)。假设您想找到一篇与此相关的文章。

    所以你的控制器:

    public function searchAction($word)
    {
       //query database using the $word slug and prepare database object accordingly
       // Search the list of articles with the slug "$word" in your model
       $articleRepository = $this->getDoctrine()->getRepositoy('GreatBundle:Article');
       $dataObject = $articleRepository->findBySlug($word);
       // So the result is in $dataObject and to print the result in your twig, your pass the var in your template
       return $this->render('GreatBundle:Default:search.html.twig', array('result' => $dataObject));
    }
    

    树枝模板 'GreatBundle:Default:search.html.twig'

    {% for item in result %}
    {{ item.title }} : {{ item.content }}
    {% endfor %}
    

    【讨论】:

      【解决方案2】:

      看看 Symfony2 Book (Sf2 Book - templating) 中的第二个例子,你必须使用函数“for”来解析你的对象(就像 php 中的数组!)

      树枝模板中的示例:

      {% for item in word %}
         {{ item.id }} - {{ item.name }} - {{ item.description }}{# etc... #}<br>
      {% else %}
      <h2>Aoutch ! No data !</h2>
      {% endfor %}
      

      啊,这不是您的渲染方法中的好 var(但它是为您的示例提供的!)

      public function searchAction($word)
      {
        //query database using the $word slug and prepare database object accordingly
      
        $dataObject; // contains query results
        return $this->render('GreatBundle:Default:search.html.twig', array('word' => $dataObject));
      }
      

      【讨论】:

      • 感谢您的回复。你能详细说明一下its not the good var吗?
      • 当然!您说 var "$dataObject" 包含查询结果。所以你必须在你的 TWIG 模板中传递 "$dataObject" (使用方法 $this->render('Template:test.html.twig, array('word' => $dataObject)); 而不是 "$word"
      • 感谢您的回复。但是,我需要使用$word 来创建$dataObject。我错过了什么吗?使用此实现,我是否不会以某种方式无法访问word slug?另外,我仍然不确定为什么它是“不是 good var”?
      猜你喜欢
      • 2017-12-07
      • 2013-06-16
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      相关资源
      最近更新 更多