Расширяет base.twig, когда это с переданной сущностью - PullRequest
0 голосов
/ 20 декабря 2018

Я делаю небольшой проект с Symfony, но теперь у меня есть вопрос о base.twig.html, и нужно ли его передавать с какой-то сущностью в нем.Я использую Symfony 4.

Допустим, у меня есть какая-то сущность MainCategory с:

  1. id
  2. name
  3. info
  4. slug

Затем из моего маршрута / я использую MainCategoryRepository, чтобы получить все записи для этой сущности, а затем визуализирую base.twig с переданными записями.Затем в панели навигации я перебираю все записи и делаю ссылки с именем entity.name.

После этого в другом маршруте "/ {slug}" я создаю другой файл ветки, который расширяет базовый.Но здесь я не использую репозиторий, я использую только Entity - MainCategory, потому что 'slug' является уникальным полем, и он получит только эту запись.И вот проблема, я просто передаю одну запись, но панель навигации из цикла 'base.twig' по всем записям, и здесь я получаю сообщение об ошибке:

Переменная "mainCategories" несуществовать.

Вот мой код:

Маршрут "/"

 /**
 * @Route("/", name="app_homepage")
 */
public function homepage(MainCategoryRepository $mainCategoryRepository)
{
    $mainCategories = $mainCategoryRepository->findAll();
    return $this->render('base.html.twig', [
        'mainCategories' => $mainCategories,
    ]);
}

"base.html.twig"

{% for mainCategory in mainCategories %}
    <li>
       <a href="{{ path('category_show', {'slug': mainCategory.slug}) }}">
       {{ mainCategory.name }}</a>
    </li>
{% endfor %}

Маршрут" / {slug} "

/**
 * @Route("/{slug}",  name="category_show")
 */
public function categoryShow(MainCategory $mainCategory)
{
    return $this->render('show.html.twig',
        [
            'mainCategory' => $mainCategory,
        ]
    );
}

" show.html.twig "

{% extends 'base.html.twig' %}
    {% block body %}
        <p>{{ mainCategory.Info }}</p>
    {% endblock %}

ОШИБКА:

Переменная "mainCategories" не существует.

Так что хорошая идея передать любую сущность в base.twig?Я могу передать все записи во второй файл ветки, но это означает, что я должен делать это в каждом шаблоне, который расширяет base.twig.

1 Ответ

0 голосов
/ 20 декабря 2018

Я нашел одно решение, не знаю, является ли оно идеальным или правильным, но оно работает.

Я сделал один Сервис с методом, в котором я возвращаю все записи из MainCategory Entity.

MainCategoryLoaderService

protected $mainCategoryRepository;

public function __construct(MainCategoryRepository $mainCategoryRepository)
{
    $this->mainCategoryRepository = $mainCategoryRepository;
}

public function getAllMainCategories()
{
    return $this->mainCategoryRepository->findAll();
}

Затем в файле config/packages/twig.yaml я сделал одну глобальную переменную:

Глобальная переменная

globals:
    globalMainCategory: '@App\Service\MainCategoryLoaderService'

После этого в base.html.twig я сделал одну переменную, в которой у меня будут все основные категории:

Переменная Twig

{% set mainCategories = globalMainCategory.getAllMainCategories() %}

А затем просто зациклимсяэта переменная.

...