跳到主要內容

The 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 命令的此行為。

請參閱 https://php.dev.org.tw/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 命令的此行為。

請參閱 https://php.dev.org.tw/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 中引入。

建立您自己的 Maker

如果您的應用程式需要產生自訂樣板程式碼,您可以重複使用此套件提供的工具來建立您自己的 make:... 命令。若要執行此操作,您應該在您的 src/Maker/ 目錄中建立一個類別,該類別擴展了 AbstractMaker。這就完成了!

有關如何完成新的 maker 命令的範例,請參閱 核心 maker 命令。請確保您的類別已註冊為服務,並標記為 maker.command。如果您使用的是標準 Symfony services.yaml 設定,則會自動完成此操作。

覆寫產生出的程式碼

產生出的程式碼永遠不可能對所有人都是完美的。MakerBundle 嘗試在新增「擴充點」與保持程式庫簡單之間取得平衡,以便可以改進現有命令並新增命令。

基於這個原因,一般來說,產生出的程式碼無法修改。在許多情況下,新增您 *自己的* maker 命令非常容易,因此我們建議這樣做。但是,如果您想要某些擴充點,請開啟 issue 以便我們可以討論!

這項作品,包括程式碼範例,均根據 Creative Commons BY-SA 3.0 授權條款授權。
目錄
    版本