Rumen Panchev
Rumen Panchev

Reputation: 498

Why variable does not exist in twig Symfony?

I am trying to print all categories in my twig in this way:

 <div class="col-md-3">
                <p class="lead">Categories</p>
                <div class="list-group">
                    {% for category in categories %}
                    <a href="#" class="list-group-item">{{ category.name }}</a>
                    {% endfor %}
               </div>
</div>

But it tells me that variable categories does not exist.

Twig Structure:

{% extends 'base.html.twig' %}

{% block body %}
    <!-- Page Content -->
    <div class="container">

        <div class="row">

            <div class="col-md-3">
                <p class="lead">Categories</p>
                <div class="list-group">
                    {% for category in categories %}
                        <a href="#" class="list-group-item">{{ render(controller(
                                'AppBundle:Category:listCategories'
                            )) }}</a>
                    {% endfor %}
                </div>
            </div>

            <div class="col-md-9">

                <div class="row carousel-holder">

                    <div class="col-md-12">
                        <div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
                            <ol class="carousel-indicators">
                                <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
                                <li data-target="#carousel-example-generic" data-slide-to="1"></li>
                                <li data-target="#carousel-example-generic" data-slide-to="2"></li>
                            </ol>
                            <div class="carousel-inner">
                                <div class="item active">
                                    <img class="slide-image" src="https://files.illinoispolicy.org/wp-content/uploads/2016/09/Garbage-Politicians-Jesse-White-800x300.png" alt="">
                                </div>
                                <div class="item">
                                    <img class="slide-image" src="https://files.illinoispolicy.org/wp-content/uploads/2016/07/garbage-politicians-michael-madigan-800x300.png" alt="">
                                </div>
                                <div class="item">
                                    <img class="slide-image" src="https://files.illinoispolicy.org/wp-content/uploads/2015/03/lion-meat-act-2-800x300.jpg" alt="">
                                </div>
                            </div>
                            <a class="left carousel-control" href="#carousel-example-generic" data-slide="prev">
                                <span class="glyphicon glyphicon-chevron-left"></span>
                            </a>
                            <a class="right carousel-control" href="#carousel-example-generic" data-slide="next">
                                <span class="glyphicon glyphicon-chevron-right"></span>
                            </a>
                        </div>
                        <br>
                    </div>

                </div>

                <div class="row">

                    <div class="col-sm-4 col-lg-4 col-md-4">
                        <div class="thumbnail">
                            <img src="http://placehold.it/320x150" alt="">
                            <div class="caption">
                                <h4 class="pull-right">$24.99</h4>
                                <h4><a href="#">First Product</a>
                                </h4>
                                <p>See more snippets like this online store item at <a target="_blank" href="http://www.bootsnipp.com">Bootsnipp - http://bootsnipp.com</a>.</p>
                            </div>
                            <div class="ratings">
                                <p class="pull-right">15 reviews</p>
                                <p>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                </p>
                            </div>
                        </div>
                    </div>

                    <div class="col-sm-4 col-lg-4 col-md-4">
                        <div class="thumbnail">
                            <img src="http://placehold.it/320x150" alt="">
                            <div class="caption">
                                <h4 class="pull-right">$64.99</h4>
                                <h4><a href="#">Second Product</a>
                                </h4>
                                <p>This is a short description. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                            </div>
                            <div class="ratings">
                                <p class="pull-right">12 reviews</p>
                                <p>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star-empty"></span>
                                </p>
                            </div>
                        </div>
                    </div>

                    <div class="col-sm-4 col-lg-4 col-md-4">
                        <div class="thumbnail">
                            <img src="http://placehold.it/320x150" alt="">
                            <div class="caption">
                                <h4 class="pull-right">$74.99</h4>
                                <h4><a href="#">Third Product</a>
                                </h4>
                                <p>This is a short description. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
                            </div>
                            <div class="ratings">
                                <p class="pull-right">31 reviews</p>
                                <p>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star"></span>
                                    <span class="glyphicon glyphicon-star-empty"></span>
                                </p>
                            </div>
                        </div>
                    </div>
                </div>

            </div>

        </div>

    </div>
{% endblock %}

When y try to do for in other template, it's working, but i want to do it in the homepage twig

Here is my controller:

public function listCategoriesAction()
    {
        $em = $this->getDoctrine()->getManager();
        $categoryRepository = $em->getRepository('AppBundle:Category');
        $categories = $categoryRepository->findAll();

       return $this->render('homepage/homepage.html.twig', array(
           'categories' => $categories->getResult()
       ));
    }

Upvotes: 1

Views: 4217

Answers (1)

Maxim Strutinskiy
Maxim Strutinskiy

Reputation: 531

If you want render content in this variant:

<pre><code>
{% for category in categories %}
 {{ category.name }}
{% endfor %}
</code></pre>

You must generate this data in controller and return response:



    $em = $this->getDoctrine()->getManager();
    $categoryRepository = $em->getRepository('YouBundle:Category');
    $category = $categoryRepository->findAll();
    
    return $this->render(
    'MainBundle:Admin/page:order.html.twig',   
      [
        'categories' => $category->getResult(),
      ] );

Hear links in my test progect:
controller - TIK
template - TIK

Hope it's mast help.

Upvotes: 1

Related Questions