2

我已经能够使用 Symfony EasyAdminBundle 为项目构建一个简单的 CRUD 应用程序,它对于基于实体的普通用例非常有效。我有一些额外的用例,但我想做一些事情,比如重建数据。对于这些,我必须捕获某些请求属性,传递给控制器​​,然后委托给远程服务的后端 API 调用。

这一切都可以在 Symfony 中完成,但我遇到了如何将其连接到 EasyAdmin 视图/工作方法的问题。理想情况下,我希望这是一个易于管理的页面,并且不会丢失左侧菜单等。到目前为止,我发现这样做的唯一方法是创建一个使用现有表之一但只有一些属性的模型类我需要进入 API。然后我覆盖控制器操作,而不是执行默认保存,而是针对该远程 API 进行处理。

这种方法的问题在于,显然我现在绑定到 Doctrine 实体,这对于无法映射到数据库的请求来说是有问题的。

有没有办法定义一个逻辑实体,让我可以利用关联,以便我可以进行查找等,这将无缝连接到捆绑包中,但实际上并不绑定到后端数据库表或视图?

4

3 回答 3

5

我正在为将来可能仍面临此问题的人们添加我的回复。我如何在不创建实体的情况下解决这个问题:

  • 创建自定义控制器: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'}
于 2019-12-14T12:22:17.383 回答
3

我将按照此处的说明创建自定义操作来解决此问题(可能您需要基于路由的操作),然后使用扩展自的模板@EasyAdmin\default\layout.html.twig或与您想要实现的类似的任何其他默认模板。

于 2016-08-08T17:02:24.287 回答
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}。

假设您在项目中安装了一个虚构的开源 AcmeBlogBu​​ndle。虽然您对所有内容都非常满意,但您希望覆盖博客列表页面的模板。在包中,您要覆盖的模板位于 Resources/views/Blog/index.html.twig。

要覆盖 bundle 模板,只需将 index.html.twig 模板从 bundle 复制到 app/Resources/AcmeBlogBu​​ndle/views/Blog/index.html.twig (app/Resources/AcmeBlogBu​​ndle 目录将不存在,所以你将需要创建它)。您现在可以自由自定义模板。

参考:https ://symfony.com/doc/3.4/templating/overriding.html

于 2018-05-16T15:43:50.460 回答