Рендеринг мультимассива в TWIG

Я публикую рядом со своей проблемой здесь

Потому что я не могу отобразить свой массив в Twig.

{{ dump(besoins) }} дает мне что-то вроде

 array (size=30)   0 => 
     array (size=3)
       'stock' => 
         object(TG\ComptaBundle\Entity\Stock)[1097]
           private 'dimensions' => 
             object(Doctrine\ORM\PersistentCollection)[1131]
               ...
           private 'id' => int 1
           private 'name' => string 'Dilite 2' (length=8)
           private 'prix' => int 15
       'dimension' => 
         object(TG\ComptaBundle\Entity\Dimension)[1134]
           private 'stocks' => 
             object(Doctrine\ORM\PersistentCollection)[1123]
               ...
           private 'id' => int 10
           private 'name' => string '15 x 15' (length=7)
           private 'longueur' => int 15
           private 'largeur' => int 15
       'besoin' => 
         array (size=1)
           0 => 
             object(TG\ComptaBundle\Entity\Besoin)[1773]
               ...

Итак, я вижу, что в моем массиве есть «besoin».

Но с моим twig-кодом мои ячейки остаются пустыми... :(

<table class="table table-hover table-bordered">
        <thead>
            <tr>
                <th>#</th>
                    {% for dimension in dimensionslist %}
                        <th>{{ dimension.name }}</th>
                    {% endfor %}
            </tr>
        </thead>
        <tbody>
                {% for stock in materiauxlist %}
                    <tr>
                        <td>{{ stock.name }}</td>
                        {% set newArray = [] %}
                        {% for tableau in besoins %}
                            {% if tableau.stock.name == stock.name %}
                                {% set newArray = newArray|merge([tableau]) %}
                            {% endif %}
                        {% endfor %}
                        {% for tableau in newArray %}
                                {% if besoin %}
                                    <td>{{ besoin.nombre }}</td>
                                {% endif %}
                        {% endfor %}
                    </tr>
                {% endfor %}
    </tbody>
    </table>

Вот мой контроллер:

public function commandeAction()
    {
        $em = $this->getDoctrine()->getManager();
        $materiauxlist = $em->getRepository('TGComptaBundle:Stock')->findAll();
        $dimensionslist = $em->getRepository('TGComptaBundle:Dimension')->findAll();
        $tab1 = array_merge($materiauxlist, $dimensionslist);
        $besoins = array();

        foreach ($materiauxlist as $stock) {
                foreach ($dimensionslist as $dimension) {
                    $besoin = $em->getRepository('TGComptaBundle:Besoin')->findBy(array('stock' => $stock, 'dimension' => $dimension), null, 1);
                    $tableau = array('stock' => $stock, 'dimension' => $dimension, 'besoin' => $besoin);
                    $besoins[] = $tableau;
                }
        }

        return $this->render('TGProdBundle:Projet:stocks.html.twig', array(
                'materiauxlist' => $materiauxlist,
                'dimensionslist' => $dimensionslist,
                'besoin' => $besoin,
                'tableau' => $tableau,
                'besoins' => $besoins));
    }

Пожалуйста, кто-нибудь может мне помочь?


person Nico    schedule 21.07.2015    source источник
comment
Вы уверены, что $besoin оценивается как true в ветке {% if besoin %}?   -  person KmeCnin    schedule 21.07.2015
comment
Нет, в этом суть, я думаю, что оно оценивается как ложное, но я не знаю, почему, потому что я вижу значения в своем дампе.   -  person Nico    schedule 21.07.2015
comment
Нет, вы сказали, что сбрасываете besoinS, так что это не связано с besoin (без S)   -  person KmeCnin    schedule 21.07.2015


Ответы (1)


Я думаю, что это неправильно:

{% for tableau in newArray %}
   {% if besoin %}
      <td>{{ besoin.nombre }}</td>
   {% endif %}
{% endfor %}

Изменить: это должно выглядеть так:

{% for values in newArray %}
   {% for key,value in values %}
      {% if key == "besoin" %}
         {% for bison in value %}
            <td>{{ bison.nombre }}</td>
         {% endfor %}
      {% endif %}
   {% endfor %}
{% endfor %}
person Nickolaus    schedule 21.07.2015
comment
Спасибо, но, к сожалению, номер ключа для массива с ключами stock, size, besoin не существует в TGProdBundle:Projet:stocks.html.twig в строке 31. Если вместо этого я поставлю {{ value.besoin }}, у меня возникнет ошибка преобразования arraytoString:/ - person Nico; 21.07.2015
comment
Это потому, что Бизоны - это коллекция - person Nickolaus; 21.07.2015
comment
Извините, я не уверен, что понимаю, где вы хотите, я поместил это :s - person Nico; 21.07.2015
comment
просто замените первый блок, который я цитировал из вашего кода, вторым блоком кода, который я опубликовал - person Nickolaus; 21.07.2015
comment
Номер метода для объекта TG\ComptaBundle\Entity\Stock не существует в TGProdBundle:Projet:stocks.html.twig в строке 32. Я думаю, что он принимает первый ключ (запас) в $tableau, а не ключ $besoin :'( - person Nico; 21.07.2015
comment
Если я изменю свой массив, например $tableau = array('besoin' => $besoin, 'stock' => $stock, 'dimension' => $dimension); ошибка говорит, что номер ключа для массива с ключами 0 не существует в TGProdBundle:Projet:stocks.html.twig в строке 32 - person Nico; 21.07.2015
comment
Я обновил структуру цикла, попробуйте этот - person Nickolaus; 21.07.2015
comment
Номер ключа для массива с ключами 0 не существует в TGProdBundle:Projet:stocks.html.twig в строке 32. - person Nico; 22.07.2015
comment
Я обновил решение.... но просто подсказка: используйте функцию twig dump() для отладки переменных, чтобы вы могли проанализировать свою проблему. - person Nickolaus; 22.07.2015
comment
Я дал вам дамп (besoins) в верхней части моего первоначального поста, он кажется хорошим. Ваш последний код кажется лучше. Я постараюсь все устроить и вернусь, чтобы рассказать вам, как результат ;) Большое спасибо за помощь - person Nico; 22.07.2015
comment
Проблема в том, что у меня besoin в первом столбце, а не в правом. Вы можете увидеть это здесь: hostingpics.net/viewer.php?id=910438Capture. jpg - person Nico; 22.07.2015
comment
Может быть, если я найду решение поставить X в ‹td›, когда besoin равен нулю, это может быть хорошо - person Nico; 22.07.2015
comment
Отлично, он отлично работает с циклом {% if value %} ;) Еще раз спасибо за вашу помощь, это было бесценно после нескольких дней решения той же проблемы! - person Nico; 23.07.2015
comment
Извините, я начинаю здесь, и у меня нет рефлекса! Но я сделал это сейчас ;) - person Nico; 24.07.2015