Попытка отобразить несколько записей из одной базы данных в Symfony 2 - PullRequest
1 голос
/ 22 августа 2011

В проекте, над которым я работаю, мне нужно отобразить 5 последних новостных статей на сайте. В контроллере я написал следующий код:

      $news = $repository->createQueryBuilder('p')
          ->Where('p.contenttype = :type')
          ->setParameter('type', 'newsarticle')
          ->orderBy('p.lastedit', 'ASC')
          ->getQuery();

      $latestnews = $news->getResult();

По какой-то причине это не работает, так как я получаю сообщение об ошибке:

Элемент "url" для "Array" не существует в "ShoutMainBundle: по умолчанию: page.html.twig" в строке 34

Однако, когда я изменяю getResult(); на getSingleResult();, он работает, но отображает только одну запись (что я и ожидаю, когда использую этот код).

Это то место, где я отклеиваюсь и растерялся из-за того, что я должен делать. Я погуглил «как отобразить несколько записей в Symfony», и я не нашел ответа. (Если ответ был там, я заранее извиняюсь за это). В обычном PHP я бы ожидал сделать цикл foreach (что-то похожее в любом случае), чтобы получить результаты, которые мне нужны. Но у меня также есть чувство, что для достижения того, чего я хочу, мне нужно что-то сделать в Twig. Но что мне нужно сделать, я не знаю.

Любая помощь с этим была бы очень признательна.

Спасибо

Edit: Вот код шаблона, который используется для отображения этого:

            <section id="latestnews">
            <h2>Latest News</h2>
            <ul>
                <li><a href="..{{ news.url }}" title="Read {{ news.title }}" />{{ news.title }}</a></li>
            </ul>
        </section>

Ответы [ 3 ]

3 голосов
/ 22 августа 2011

Ваш код пытается прочитать из переменной news и предполагает, что эта переменная имеет поля url и title. Если ваш контроллер возвращает массив, вы должны использовать news в качестве массива и перебирать его.

<section id="latestnews">
  <h2>Latest News</h2>
  <ul>
  {% for news in latestnews %}
   <li><a href="..{{ news.url }}" title="Read {{ news.title }}" />{{ news.title }}</a></li>
  {% endfor %}
  </ul>
</section>
1 голос
/ 22 августа 2011

Похоже, что в вашем шаблоне вы ищете объект, который не найден. Он ищет URL в объекте массива, но его не существует. Я думаю, что вам нужно поставить проверку, чтобы увидеть, существует ли она в массиве, а затем повторить, если это так. Так что-то вроде if (news.url) echo news.url;

Это может быть не такой точный синтаксис, я не так хорошо знаком с ветками, но что-то похожее на это.

0 голосов
/ 22 августа 2011

Вам нужно перебрать массив результатов "news" в Twig.

{% for n in news %}

    <li><a href="..{{ n.url }}" title="Read {{ n.title }}" />{{ n.title }}</a></li>

{% endfor %}
...