yceruto/acme-bundle

安装: 20

依赖: 0

建议: 0

安全性: 0

星星: 11

关注者: 3

分支: 0

开放问题: 0

类型:symfony-bundle

4.0 2020-09-02 21:28 UTC

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.xmlphpunit.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许可协议发布