Как настроить пользовательскую форму/страницу в EasyAdminBundle

Мне удалось создать простое CRUD-приложение для проекта с использованием Symfony EasyAdminBundle, и оно отлично сработало для обычных случаев использования на основе сущностей. У меня есть несколько дополнительных вариантов использования, когда я хочу делать такие вещи, как восстановление данных. Для этого мне нужно зафиксировать определенные атрибуты запроса, передать их контроллеру, а затем делегировать вызов внутреннего API удаленной службе.

Все это можно сделать в Symfony, но у меня возникли проблемы с тем, как связать это с представлением/методом работы EasyAdmin. В идеале я хочу, чтобы это была страница внутри простого администратора, а не потеря левого меню и т. Д. Пока единственный способ, который я нашел для этого, — создать класс модели, который использует одну из существующих таблиц, но имеет только некоторые свойства Мне нужно было бы вбить в API. Затем я переопределяю действия контроллера, поэтому вместо сохранения по умолчанию я обрабатываю этот удаленный API.

Проблема с этим подходом заключается в том, что, очевидно, теперь я привязан к сущностям Doctrine, и это будет проблематично для запросов, которые не могут быть сопоставлены с базой данных.

Есть ли способ определить логический объект, который позволил бы мне использовать ассоциации, чтобы я мог выполнять поиск и т. Д., Которые будут беспрепятственно подключаться к пакету, но на самом деле не привязаны к таблице или представлению базы данных?


person Andrew Rutter    schedule 08.08.2016    source источник


Ответы (3)


Я добавляю свой ответ для людей, которые могут столкнуться с этой проблемой в будущем. Как я решил это без создания объекта:

  • Создайте собственный контроллер: symfony console make:controller

  • Отредактируйте вид контроллера, чтобы он наследовал макет EasyAdmin:

{# ./src/templates/home/index.html.twig #}
{% extends '@EasyAdmin/Default/layout.html.twig' %}

{# Let\'s remove/empty the header #}
{% block content_header_wrapper %} {% endblock content_header_wrapper %}

{# The main page content block #}
{% block main %}
   **PUT YOUR CODE HERE**
{% endblock main %}

{# Let\'s remove/empty the footer #}
{% block content_footer_wrapper %} {% endblock content_footer_wrapper %}
  • Добавьте свою страницу в боковую навигацию
design:
      menu:
        - {route: 'home', label: 'Home', default: true, icon: 'home'}
        - {entity: 'MyEntity', label: 'My Relevant Entity', icon: 'briefcase'}
person SuperMalang    schedule 14.12.2019
comment
Почти то же самое в 2019/12, с использованием symfony4, за исключением того, что шаблон генерируется в ./templates/home/index.html.twig (для контроллера с именем home) - person commonpike; 27.12.2019

Я бы решил эту проблему, создав пользовательское действие как описано здесь (возможно, вам нужно действие на основе маршрута), а затем используйте шаблон, который расширяет @EasyAdmin\default\layout.html.twig или любой другой шаблон по умолчанию, аналогичный тому, чего вы хотите достичь.

person Javier Eguiluz    schedule 08.08.2016

Вот решение:

{# easy_admin/form.html.twig #}
{% block _product_custom_title_widget %}
    {# ... #}
    <a href="...">More information</a>
{% endblock %}

Наконец, добавьте эту пользовательскую тему в список тем, используемых для рендеринга внутренних форм:

easy_admin:
    # ...
    design:
        form_theme:
            - 'horizontal'
            # the following Twig template can be located anywhere in the application.
            # it can also be added to the twig.form_themes option to use it in the
            # entire application, not only the backend
            - 'easy_admin/form.html.twig'

Вот ссылка для получения дополнительной информации: https://symfony.com/doc/master/bundles/EasyAdminBundle/book/edit-new-configuration.html

Easyadmin — это пакет, и вы можете настроить все страницы любого пакета.

Эта логика применима к любому шаблону, который находится в комплекте: просто следуйте соглашению: app/Resources/{BUNDLE_NAME}/views/{PATH/TO/TEMPLATE.html.twig}.

Предположим, вы установили в свой проект воображаемый AcmeBlogBundle с открытым исходным кодом. И хотя вы действительно всем довольны, вы хотите переопределить шаблон для страницы со списком блогов. Внутри пакета шаблон, который вы хотите переопределить, находится в Resources/views/Blog/index.html.twig.

Чтобы переопределить шаблон пакета, просто скопируйте шаблон index.html.twig из пакета в app/Resources/AcmeBlogBundle/views/Blog/index.html.twig (каталог app/Resources/AcmeBlogBundle не будет существовать, поэтому надо его создать). Теперь вы можете настроить шаблон.

Ссылка: https://symfony.com/doc/3.4/templating/overriding.html< /а>

person flik    schedule 16.05.2018