Php 在Symfony 2中,我应该将泛型库代码放在哪里?

Php 在Symfony 2中,我应该将泛型库代码放在哪里?,php,symfony,Php,Symfony,快速问题:我应该将与Benjamin Eberlei()在本篇博文中描述的控制器实用程序服务类具有类似特征的代码放在哪里 作为过渡,我将它放在:src/ProjectName/Library中 上下文 我注意到以下几点: 此逻辑不属于特定的捆绑包,事实上它适用于要创建的所有捆绑包 此逻辑通常属于特定于应用程序的库,而不是作为捆绑包的一部分,因为捆绑包中的控制器会扩展或使用此库代码 我找到了一些主题相似的问题的答案,但不完全是我想要的答案 仅根据我在这里的研究,这个问题似乎有点被踩死了,但我认

快速问题:我应该将与Benjamin Eberlei()在本篇博文中描述的控制器实用程序服务类具有类似特征的代码放在哪里

作为过渡,我将它放在:src/ProjectName/Library中

上下文

我注意到以下几点:

  • 此逻辑不属于特定的捆绑包,事实上它适用于要创建的所有捆绑包
  • 此逻辑通常属于特定于应用程序的库,而不是作为捆绑包的一部分,因为捆绑包中的控制器会扩展或使用此库代码
我找到了一些主题相似的问题的答案,但不完全是我想要的答案

仅根据我在这里的研究,这个问题似乎有点被踩死了,但我认为之前提出的问题围绕着我真正想要的东西。无论如何,我似乎有以下选择:

  • 将这些类型的扩展放在一个捆绑包中-不适用,因为我正在开发的功能类型本质上是在扩展框架代码
  • 为项目创建一个供应商目录,所有库代码都将存放在该项目中-如果这确实是最佳实践,那么这基本上意味着我必须通过composer中的私有repo使库可用,但这意味着我必须维护一个单独的代码库
  • 创建一种存在于src/Company/SomeNamespace中的伪连接器包——我甚至不知道这是否可行,但如果它符合SF最佳实践,我将进一步研究
为了简洁起见,我再次提出了一个问题:在Symfony 2中,我应该把提供通用全局函数的类放在哪里?

提前向您表示感谢。

这篇关于的文档是一个很好的参考资料,应该是您需要的

另外,我还想指出,当您需要分叉一个Bundle并覆盖原始Bundle时,通常会使用它(我已经多次使用它)

你可以做到以下几点-它不需要你有一个包装系统或任何东西。您只需要将包放在一个zip中,您的计算机可以使用URL访问它

{
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "my/package",
                "version": "1.0.0",
                "dist": {
                    "url": "https://github.com/my/package/archive/master.zip",
                    "type": "zip"
                },
                "autoload": {
                    "psr-0": {
                        "My\\Package\\": "src/"
                    }
                }
            }
        }
    ],
    "require": {
        "my/package": "1.0.0"
    }
}

如果您的软件包不支持PSR-0,那么您需要使用它,否则您的软件包将支持您需要使用的PSR-0。

经过一番周折,虽然这里公认的答案是有价值的,但我决定创建一个“核心”包,它将容纳我的所有项目跨包/应用程序范围的依赖项和资源

这将允许我为所有资产、相关实体和特定于项目的库代码提供一个中心位置

定位于重构

我已经在内心与自己进行了推理,这是一个令人愉快的中间地带(也许是暂时的)解决方案,它允许我继续发展,而不是我目前所处的分析瘫痪状态

通过这种方式,我可以在以后重构到供应商目录解决方案中

如果您正在处理一个项目,并且对像我一样将实体和库代码分散在不同的包中这种有点不自然的感觉感到厌烦,那么这将是一个很好的解决方案

它不会改变SF2和原则2的默认行为

我之前对Symfony 2条令2配置进行了修改,允许我(正确地)将实体从捆绑包中移除,并将其放入一个单独的中心名称空间

我喜欢这个主意。我用了一会儿。这种方法需要注意的是,当您需要一个Bundle名称空间时,您不再能够在快速创建条令实体时使用命令行界面

我认为这很好,因为我需要改变周围的一切,但后来我想:

  • “表单对象怎么样?我应该把它们放在哪里?放在它们自己的目录下的/src-like-Entity is下?”
  • 服务层呢?(不是DI,而是实际的服务层——应用程序逻辑所在的层)
在写另一个“在Symfony2中我应该把XXXX放在哪里”类型的问题(我相信那些关注PHP和Symfony2标签的人已经看腻了)的中途,我停下来,把它放在一个名为assets bundle的包中,并将其重命名为Core bundle

核心捆绑包 这样,根据CLI的要求,它位于一个捆绑包中,更易于遵循,而且我可以在语义上共享此捆绑包的内容,因为它包含特定于应用程序的核心代码:

  • 实体
  • 一般形式
  • 通用HTML、CSS和JavaScript资产
  • 特定于项目的库代码
  • 我的树枝也住在这里
  • 最后,服务层类及其关联工厂也在这里
  • 如果我有任何其他的扩展,我想使Symfony为这个项目,我会添加他们在这里
最重要的是,当我有时间坐下来和composer等人一起工作时,我可以很容易地重构它,因为它都存在于一个地方

所以。简而言之回答我自己的问题:我在Symfony 2中把通用库代码放在哪里?

我将它放在一个专门为存储资产、资源和库代码而创建的包中,需要使用以下建议对多个包进行访问:

  • 创建一个核心包
  • 将泛型库代码放在这里
  • 把所有实体放在这里
  • 将通用资源(main.css、reset.css等)放在此处
  • 把通用表格放在这里
  • 将所有服务层类放在这里
打包并安装