Doctrine orm 如何在EasyAdminBundle中设置自定义表单/页面

Doctrine orm 如何在EasyAdminBundle中设置自定义表单/页面,doctrine-orm,symfony,symfony2-easyadmin,Doctrine Orm,Symfony,Symfony2 Easyadmin,我已经能够使用Symfony EasyAdminBundle为一个项目构建一个简单的CRUD应用程序,它对于基于实体的正常用例非常有效。我还有一些额外的用例,我想在这些用例中做一些事情,比如重建数据。对于这些,我必须捕获某些请求属性,传递给控制器,然后委托给远程服务的后端API调用 这一切都可以在Symfony中完成,但我遇到了如何将其连接到EasyAdmin视图/工作方法的问题。理想情况下,我希望这是easy admin中的一个页面,而不会丢失左侧菜单等。到目前为止,我发现的唯一方法是创建一个

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

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

这种方法的问题是,很明显,我现在绑定到了条令实体,这对于无法映射到数据库的请求来说是有问题的


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

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

以下是解决方案:

{# easy_admin/form.html.twig #}
{% block _product_custom_title_widget %}
    {# ... #}
    <a href="...">More information</a>
{% endblock %}
以下是有关更多信息的链接:

Easyadmin是一个捆绑包,您可以自定义任何捆绑包的所有页面

此逻辑适用于存在于捆绑包中的任何模板:只需遵循约定:app/Resources/{bundle\u 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目录将不存在,因此需要创建它)。您现在可以自由自定义模板


参考资料:

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

  • 创建自定义控制器:
    symfony控制台制作:控制器

  • 编辑控制器视图以继承EasyAdmin布局:

  • 将您的页面添加到侧边导航

2019/12年几乎相同,使用symfony4,除了在
/templates/home/index.html.twig
(对于名为
home
的控制器)生成模板外
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'
{# ./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'}