【问题标题】:Symfony2 application structure best practicesSymfony2 应用结构最佳实践
【发布时间】:2012-11-02 22:25:15
【问题描述】:

在过去的两个月里,我一直在开发一个 Symfony2 Web 应用程序。现在我一直在回顾并尝试解决它的一些问题,因为它有点失控,我想让它易于维护。

我的应用程序被构造成一系列这样的包:

src/AppName/HelpBundle
src/Appname/InterfaceBundle
src/AppName/ProductBundle
src/AppName/UserBundle

InterfaceBundle 仅包含几个用于主布局的 twig 模板,而其他每个 bundle 都只是对其进行了扩展,例如:

{% extends 'AppNameInterfaceBundle::layout.html.twig' %}

对于控制器,每个控制器目录有两个子目录:User和Admin,例如:

src/AppName/ProductBundle/Controller/Admin/ProductCategoryController.php
src/AppName/ProductBundle/Controller/User/ProductCategoryController.php

这是构建 Symfony 应用程序的适当方式,还是应该以不同的方式完成?

【问题讨论】:

  • 对我来说似乎完全结构化且合理。

标签: php symfony


【解决方案1】:

问题不是很详细,但就我所见,我认为你可以做的是以 AdminBundle 和 UserBundle 包含一组通用服务的方式组织事物,这些服务允许你构建控制器来重用它们。

然后您可以拥有一系列像 ProductBundle 这样的捆绑包,它们可以重用/与这些服务交互。在你的控制器中使用依赖注入而不是扩展 Symfony 的 Controller 类;通过这种方式,您可以利用服务继承并在 AdminBundle 和 UserBundle 中构建抽象控制器,并使用它们来派生您的特定控制器。

更一般地说,我喜欢以这样一种方式构建 Symfony 应用程序,即针对跨应用程序域的每个关注点(例如,搜索引擎中的实体索引、日志记录、URL 的生成等)我喜欢创建一个提供一些抽象来处理它的包;对于领域的每个领域(例如产品管理、用户管理等),我喜欢拥有一个实现抽象接口中提供的接口并注册要在提供的抽象中使用的特定服务的包。在这种情况下,可以通过容器的配置和标记系统来完成接口。

这个问题很笼统,所以我的回答也是,如果您想了解更多详细信息,请随时为您的问题提供更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多