流行框架第4版的发布标志着项目结构的资本变化。包括官方文档,注意以下关于代码捆绑(http://symfony.com/doc/current/bundles.html):
在4.0之前的Symfony版本中,建议使用bundle组织您自己的应用程序代码。不再推荐使用此选项,并且仅应使用捆绑包在多个应用程序之间共享代码和功能。
在第2版和第3版中,捆绑执行了两项主要任务。 1)如果开发人员或他们不同项目中的一组开发人员使用了一个大的重复功能,那么它可以在一个单独的包中取出并从项目转移到项目中。这种使用的一个很好的例子是任何项目中的用户系统。它包括用户,角色,权限(以及可能的其他),实体控制器,用于在应用程序中登录的控制器,注销应用程序(安全策略可能同时不同)以及用于查看的模板的模型。另一个很好的例子是行政小组,其基础是相同的。 2)从逻辑的角度来看,Symfony在不同的目录中采用了单独的功能,因此,通过捆绑来命名空间。例如,在我过去的一个项目中,我划分了空间:用户管理系统,应用程序游戏化(社交网络目标),合作伙伴空间,地理环境(用于处理地图和按IP定义城市),支付交易环境。如下。
在我的下一个项目中,我不想使用除Symfony4之外的任何内容来在实现其新功能时遵循框架的最佳实践。如果官方文档不再坚持创建捆绑包,我怎样才能在不同区域组织逻辑上独立的代码分离?如果模型的所有类都存储在同一目录中,则会产生混淆并增加在大型项目结构中查找所需文件的时间。这同样适用于模板以及其他所有内容。当我使用一个功能时,我只下载了此功能的目录。
现在,Symfony是否鼓励您根据自己的判断定义类,模板等的结构?
作为Symfony的新手,从版本4.2开始,我遇到了与@DeveloperMobile相同的问题。
这是我的目录结构,基于指南Symfony Best Practices版本4.2的建议
该建议基本上讲述了结构:
基本上它说:是的,您可以使用子文件夹在/ src中组织您的代码,但具有某些功能的代码(如Controller,Entity,Form,Repository等)应该在特定的目录中。
root/
├─ assets/
├─ bin/
│ └─ console
├─ config/
└─ public/
│ └─ index.php
├─ src/
├─ Controller/
├─ DefaultController.php
├─ ...
├─ Api/
│ ├─ ..
│ └─ ..
├─ Backend/
│ ├─ ..
│ └─ ..
├─ Entity/
├─ Form/
├─ Repository/
├─ Twig/
├─ Utils/
└─ Kernel.php
├─ tests/
├─ templates/
├─ translations/
├─ var/
│ ├─ cache/
│ └─ log/
└─ vendor/
这是上面链接中所有建议的列表:
对于大多数项目,您应该将所有代码存储在src /目录中。在这里,你可以创建你想组织的任何目录:
正如他们所说(source),你定义了自己的结构,不建议重构你所有的实际应用
我们的建议合理而明确:您可以将这些最佳实践用于新应用程序,但您不应重构现有应用程序以遵守这些最佳实践。
我希望你能得到答案:)
每个大型项目都应分为后端,前端,api或服务,以及格式之间的变量键,错误代码键和缓存键控制,因此每个项目都有自己的依赖关系,它缩短了维护时间,开发时间,等......
backend.mysite.com
www.mysite (frontend)
api.mysite.com
正如@Nelson所说,无需重构您当前的应用程序。
如果它是一个新项目,你基本上可以做你想要的。
例如,您可以像这样制作控制器
src
- Controller
- Bundle1 //Bundle is not the right word here, it's just to say you can separate your code in independents parts like this
- Bundle2
逻辑类,模型(实体/文档)等同样的事情,等等。
您只需更改services.yaml
文件以指示控制器的位置,并定义您在哪些文件夹中具有服务(可注入类)等。
您基本上可以自由地做任何你想做的事情,即使它建议遵循他们的演示应用程序(src/controller/*
,src/Form/*
等)
这个问题已经过时了,我希望它仍能帮助你。