Я создал меню навигации из данных базы данных mySQL:
navbar.html.twig
{% block body %}
{% for page in pages %}
{{page.name}}
{% endfor %}
{% endblock %}</span>
PageController.php
<?php
namespace App\Controller;
use App\Entity\Pages;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class PagesController extends Controller
{
/**
* @Route("/pages", name = "pages")
*/
public function index()
{
$pages = $this->getDoctrine()->getRepository(Pages::class)->findAll();
return $this->render('inc/navbar.html.twig', array('pages' => $pages));
}
}
Если я сейчас открою mypage.com/pages, он будет работать нормально. Я вижу все свои страницы.
Но сейчас я хочу использовать меню навигации на своей главной странице, поэтому я включил его.
homepage.html.twig:
{% block title %}Symfony{% endblock %}
{% block body %}
{{ include('inc/navbar.html.twig') }}
{% endblock %}
Когда я открываю mypage.com, я получаю сообщение об ошибке:
Variable "pages" does not exist.
@ Мистер Дж. Но как мне это сделать?
Что ты имеешь в виду? Пройдите pages или используйте фильтр default, например {% for {% for page in pages|default([]) %
@DarkBee Теперь я в замешательстве
Поцарапайте первый {% for - Он должен быть {% for page in pages|default([]) %}






Передайте свою переменную Pages на вашу домашнюю страницу так же, как вы передаете ее своей странице / pages. Добавьте array('pages' => $pages) в функцию вашей домашней страницы.
Или, в качестве альтернативы, вы можете использовать ответ @ DarkBee, поместив {% for page in pages|default([]) %} в свой navbar.html.twig. (Кредиты принадлежат @DarkBee)
Так что мне действительно нужно добавить эту переменную в каждый контроллер для всех моих страниц, которые я хочу использовать в меню навигации? Мне это кажется не очень удобным
Есть несколько способов сделать это. Вы можете добавить его как глобальную переменную или написать собственную функцию, возвращающую страницы.
Вы включаете свою навигационную панель на свою домашнюю страницу, не передавая ей переменную $ pages.