我已经能够使用Symfony EasyAdminBundle为项目构建一个简单的CRUD应用程序,它对于基于正常实体的用例非常有用。我有一些额外的用例,虽然我想做重建数据的事情。对于这些,我必须捕获某些请求属性,传递给控制器,然后委托给远程服务的后端API调用。
这一切都可以在Symfony中完成,但我遇到了如何将其连接到EasyAdmin视图/工作方法的麻烦。理想情况下,我希望这是一个简单的管理员页面,而不是丢失左侧菜单等。到目前为止,我发现这样做的唯一方法是创建一个Model类什么是使用现有的表,但只有一些属性我需要开车进入API。然后,我覆盖控制器操作,而不是执行默认保存,我处理远程API。
这种方法的问题显然是我现在已经绑定到Doctrine实体,这对于无法映射到数据库的请求会有问题。
有没有办法定义一个逻辑实体,让我可以利用关联,这样我就可以进行查找等,它会无缝连接到捆绑包中,但实际上并没有绑定到后端数据库表或视图?
答案 0 :(得分:2)
我为将来可能仍会遇到此问题的人们添加我的回应。 我如何在不创建实体的情况下解决此问题:
创建自定义控制器: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'}
答案 1 :(得分:1)
我解决了这个问题,创建了一个自定义操作as explained here(可能你想要一个基于路由的操作),然后使用一个扩展自@EasyAdmin\default\layout.html.twig
的模板或任何其他类似于你的默认模板想要实现。
答案 2 :(得分:1)
这是解决方案:
{# 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目录将不存在,所以你需要创建它)。您现在可以自由地自定义模板。