yceruto / acme-bundle
Requires
- php: ^7.2.9
Requires (Dev)
- symfony/config: ^4.4
- symfony/dependency-injection: ^4.4
- symfony/http-kernel: ^4.4.13
- symfony/phpunit-bridge: ^4.4
This package is auto-updated.
Last update: 2024-09-29 05:22:06 UTC
README
简短指南,解释如何将当前目录结构升级以与标准骨骼保持一致
└── AcmeBundle
├── assets/
├── bin/
├── config/
├── docs/
├── public/
├── src/
│ ├── Model/
│ ├── Service/
│ └── AcmeBundle.php
├── templates/
├── tests/
└── translations/
AcmeBundle
这是当前结构(参见master
分支)
└── AcmeBundle
├── DependencyInjection/
├── Model/
├── Resources/
│ ├── assets/
│ ├── bin/
│ ├── config/
│ ├── docs/
│ ├── public/
│ ├── translations/
│ └── views/
├── Service/
├── Tests/
├── AcmeBundle.php
└── composer.php
尽管它从一开始就有效,但这种结构将源代码与资源文件、配置、文档等混合在一起,这不是很好,因为它很容易在包含大量目录和文件的仓库根目录中迷失。
composer.json文件
"autoload": {
"psr-4": {
"Acme\\AcmeBundle\\": ""
}
}
关于自动加载,当使用composer构建优化后的自动加载器时,它会有轻微的影响,因为测试类将位于类映射中,如果只有几个类,这并不是一个大问题,但它并不是零影响。
在接下来的几节中,我们将更改结构以解决这些问题,而不会破坏捆绑功能。
重制版
以下步骤与该存储库示例相关,请根据您的案例进行调整。
开始之前,让我们安装依赖关系并运行所有测试,以确保一切正常。
$ cd AcmeBundle
$ composer install
$ ./vendor/bin/simple-phpunit
让我们首先创建一个src/
目录并将我们的源代码移到那里
$ mkdir src/
$ mv AcmeBundle.php DependencyInjection/ Model/ Resources/ Service/ src/
然后我们将当前Tests/
目录重命名为tests/
(小写)
$ mv Tests/ tests/
更新您的composer.json
以反映新的PSR-4自动加载路径
"autoload": {
"psr-4": {
"Acme\\AcmeBundle\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Acme\\AcmeBundle\\Tests\\": "tests/"
}
}
运行
composer dump-autoload
以使用新的psr-4映射更新自动加载文件。
并更新phpunit.xml
和phpunit.xml.dist
文件
<testsuites>
<testsuite name="AcmeBundle Test Suite">
<directory>tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory>src</directory>
</whitelist>
</filter>
将assets/
、bin/
和docs/
目录移动到根级别,因为它们不属于任何Symfony目录约定
$ mv src/Resources/assets/ src/Resources/bin/ src/Resources/docs/ ./
最后,检查测试是否通过./vendor/bin/simple-phpunit
,如果它是绿色的,这意味着你几乎完成了!
到目前为止,它应该看起来像这样
└── AcmeBundle
├── assets/
├── bin/
├── docs/
├── src/
│ ├── DependencyInjection/
│ ├── Model/
│ ├── Resources/
│ │ ├── config/
│ │ ├── public/
│ │ ├── translations/
│ │ └── views/
│ ├── Service/
│ └── AcmeBundle.php
└── tests/
到目前为止,此结构与所有Symfony版本兼容。
在revamped
分支上查看。
升级版
此版本将从Symfony 4.4开始得到支持,其中引入了新的捆绑目录约定,允许您在捆绑的根目录中拥有config/
、public/
、translations/
和templates/
目录。
这意味着不再需要src/Resources/
目录,让我们移动这些目录
$ mv src/Resources/config/ src/Resources/public/ src/Resources/translations/ ./
$ mv src/Resources/views templates
$ rmdir src/Resources
此时,目录结构将如下所示(与标准的PHP软件包骨骼一致)
└── AcmeBundle
├── assets/
├── bin/
├── config/
├── docs/
├── public/
├── src/
│ ├── DependencyInjection/
│ ├── Model/
│ ├── Service/
│ └── AcmeBundle.php
├── templates/
├── tests/
└── translations/
但是,为了使它正常工作,有必要更改捆绑的根路径
class AcmeBundle extends Bundle
{
public function getPath(): string
{
return \dirname(__DIR__);
}
}
在upgraded
分支上查看。
混合版
如果您希望您的捆绑与旧版本的Symfony兼容,请使用符号链接作为解决方案
$ mkdir src/Resources && cd src/Resources
$ ln -s ../../config/ config
$ ln -s ../../public/ public
$ ln -s ../../translations/ translations
$ ln -s ../../templates/ views
最终的目录结构将是这样的
└── AcmeBundle
├── assets/
├── bin/
├── config/
├── docs/
├── public/
├── src/
│ ├── DependencyInjection/
│ ├── Model/
│ ├── Resources/
│ │ ├── config/ (symlink)
│ │ ├── public/ (symlink)
│ │ ├── translations/ (symlink)
│ │ └── views/ (symlink)
│ ├── Service/
│ └── AcmeBundle.php
├── templates/
├── tests/
└── translations/
最后,让我们根据当前安装的Symfony版本定义捆绑路径
use Symfony\Component\HttpKernel\Kernel;
class AcmeBundle extends Bundle
{
public function getPath(): string
{
return Kernel::VERSION_ID >= 40400 ? \dirname(__DIR__) : __DIR__;
}
}
这就完成了!
在mixed
分支上查看。
许可协议
此软件根据MIT许可协议发布