跳到内容

Symfony MakerBundle

编辑此页

Symfony Maker 帮助您创建空的命令、控制器、表单类、测试等,让您可以忘记编写样板代码。此扩展包假定您正在使用标准的 Symfony 6.4 目录结构,但许多命令可以将代码生成到任何应用程序中。

安装

运行此命令以在您的应用程序中安装并启用此扩展包

1
$ composer require --dev symfony/maker-bundle

用法

此扩展包在 make: 命名空间下提供了几个命令。执行此命令列出所有命令

1
2
3
4
5
6
7
8
9
10
$ php bin/console list make

 make:command            Creates a new console command class
 make:controller         Creates a new controller class
 make:entity             Creates a new Doctrine entity class

 [...]

 make:validator          Creates a new validator and constraint class
 make:voter              Creates a new security voter class

命令的名称是不言自明的,但其中一些命令包含可选参数和选项。使用 --help 选项查看它们

1
$ php bin/console make:controller --help

注意

make:entity 需要安装和配置 doctrine/orm。此 maker 仅支持 ORM,不支持 ODM。

代码检查生成代码

MakerBundle 使用 php-cs-fixer 在生成 .php 文件时强制执行编码标准。当运行 make 命令时,MakerBundle 将使用与此扩展包打包在一起的 php-cs-fixer 版本和配置。

您可以通过各自的环境变量显式设置 php-cs-fixer 二进制文件和/或配置文件的自定义路径

  • MAKER_PHP_CS_FIXER_BINARY_PATH 例如 tools/vendor/bin/php-cs-fixer
  • MAKER_PHP_CS_FIXER_CONFIG_PATH 例如 .php-cs-fixer.config.php

提示

PHP-CS-Fixer 是否全局安装?为了避免在每个项目中都设置这些,您可以改为在您的操作系统上设置它们。

配置

此扩展包不需要任何配置。但是,您可以覆盖默认配置

1
2
3
4
5
6
# config/packages/maker.yaml
when@dev:
    maker:
        root_namespace: 'App'
        generate_final_classes: true
        generate_final_entities: false

root_namespace

类型: string 默认值: App

生成所有类时使用的根命名空间(例如,App\Entity\ArticleApp\Command\MyCommand 等)。将其更改为 Acme 将导致 MakerBundle 创建新的类,例如(例如,Acme\Entity\ArticleAcme\Command\MyCommand 等)。

generate_final_classes

类型: boolean 默认值: true

默认情况下,MakerBundle 将使用 final PHP 关键字生成您的所有类,但 Doctrine 实体除外。将此设置为 false 以覆盖所有 maker 命令的此行为。

请参阅 http://php.ac.cn/manual/en/language.oop5.final.php

1
2
3
4
final class MyVoter
{
    ...
}

1.61

generate_final_classes 在 MakerBundle 1.61 中引入。

generate_final_entities

类型: boolean 默认值: false

默认情况下,MakerBundle 不会使用 final PHP 关键字生成您的任何 Doctrine 实体类。将此设置为 true 以覆盖所有创建实体的 maker 命令的此行为。

请参阅 http://php.ac.cn/manual/en/language.oop5.final.php

1
2
3
4
5
#[ORM\Entity(repositoryClass: TaskRepository::class)]
final class Task extends AbstractEntity
{
    ...
}

1.61

generate_final_entities 在 MakerBundle 1.61 中引入。

创建您自己的 Makers

如果您的应用程序需要生成自定义样板代码,您可以创建自己的 make:... 命令,重用此扩展包提供的工具。为此,您应该在 src/Maker/ 目录中创建一个扩展 AbstractMaker 的类。就这么简单!

有关如何完成您的新 maker 命令的示例,请参阅 核心 maker 命令。确保您的类注册为服务并标记为 maker.command。如果您正在使用标准的 Symfony services.yaml 配置,这将自动完成。

覆盖生成代码

生成的代码永远不可能对每个人都完美。MakerBundle 试图在添加“扩展点”与保持库的简单性之间取得平衡,以便可以改进现有命令并添加新命令。

因此,总的来说,生成的代码无法修改。在许多情况下,添加您自己的 maker 命令非常容易,因此我们建议这样做。但是,如果您想要一些扩展点,请打开一个 issue,以便我们可以讨论!

本作品,包括代码示例,均根据 Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本