Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用git和子模块,什么';什么是好的文件夹结构?_Php_Git_Phpunit_Project Organization - Fatal编程技术网

Php 使用git和子模块,什么';什么是好的文件夹结构?

Php 使用git和子模块,什么';什么是好的文件夹结构?,php,git,phpunit,project-organization,Php,Git,Phpunit,Project Organization,我在子模块中使用git,我很难想出如何组织我的文件。 我用PHP开发,并使用单元测试。所以现在,我在每个模块中使用这个组织: src/ 测验/ 这似乎是一个绝妙的想法,但问题是,当我向项目中添加“git子模块”时,我的路径是: project/modules/News/src/index.php src/文件夹确实有问题 我是否应该将所有文件放在模块根目录中,并在源目录中混合一个测试/文件夹?对我来说那听起来很糟糕。你在干什么 编辑:由于自动加载,src/文件夹有问题。我不应该在我所有的类名

我在子模块中使用git,我很难想出如何组织我的文件。 我用PHP开发,并使用单元测试。所以现在,我在每个模块中使用这个组织:

  • src/
  • 测验/
这似乎是一个绝妙的想法,但问题是,当我向项目中添加“git子模块”时,我的路径是: project/modules/News/src/index.php

src/文件夹确实有问题

我是否应该将所有文件放在模块根目录中,并在源目录中混合一个测试/文件夹?对我来说那听起来很糟糕。你在干什么


编辑:由于自动加载,src/文件夹有问题。我不应该在我所有的类名中都加上“src”…

当我遇到这个问题时,我所做的是创建一个名为vendors的文件夹,并将所有子模块放在其中。然后,我使用相对路径将目录符号链接到代码中需要它们的位置。您可以将符号链接提交到git,当其他人拉入存储库时,它们仍然可以工作。当然,这只适用于使用基于*nix的操作系统的情况

例如:

modules/
vendor/module1/src/
可以这样进行符号链接(从模块目录):


不确定这是否解决了您的问题。

我不会将测试放在单独的模块中。将其保存在同一存储库中。

只要自动加载程序能够找到您的文件,您的文件夹布局基本上是不相关的。如果使用PEAR约定将类名映射到它们的源文件,则可以将src目录添加到include路径或堆栈第二个自动加载程序。然后,您不必将src添加到类名中

PEAR约定的替代方法是在文件和类之间使用静态映射。有

静态自动加载器的方法也用于。该工具将创建src和tests文件夹,包括和。这是一个方便的包裹


对于包含子模块,考虑将它们放入LIB或EXT文件夹中。有关其外观的示例,请参见。确保您还查看了,以了解如何包含各种自动加载器。

某些版本的Windows具有类似符号链接的功能,您可以尝试使用它们。我不在Windows上开发,所以我从未尝试过。我从未计划将我的测试放在不同的存储库中。所有模块都有自己的测试。你说得对,只是我可以在一个项目中有30多个模块。所以我要堆叠30多个自动装弹机,这不是很可怕吗?我已经知道(并与phpdox项目合作;)但这不是同一类型的子模块。在我的例子中,子模块更像wordpress插件。此外,该项目必须是php 5.2:(@FMaz008你为什么不使用Theser的PHPAB,让它在整个项目中迭代,包括你的30个子模块,然后使用单一的自动加载器呢?IIRC PHPAB也有一个5.2版的模板,所以版本不应该是个问题。编辑问题:问题是你希望类名与文件夹结构相匹配。Ofc每个模块还应该有自己的测试,这是一个问题,因为您不能将(比如BarModule/src=>module/Bar)包含在git子模块中?(只是检查我是否获得了您的需求权限)
ln -s ../vendor/module1/src module1