コンテンツにスキップ
BlackOps1.xは試験的なバージョンです。Production Readyは2.xを予定しています。Releases
BlackOps
Esc
navigateopen⌘Jpreview
このページの内容

Generators

BlackOps CLIからOperationとMigrationを安全に生成し、Framework更新後のStubを利用する。

Install済みApplicationでは、Project RootのblackopsからFrameworkが提供するGeneratorを実行できます。生成対象となるOperationは、Applicationが実行したい一つの意図と処理単位です。

Release: make:operationmake:migrationはExperimental Stable 1.1.0で利用できます。make:seederはRepository mainのExperimental Surfaceです。生成済みSourceはApplication所有であり、Framework Updateでは変更されません。

Operationを生成する

FeatureとActionを<Feature>/<Action>形式で指定し、永続的なOperation Typeを--typeへ渡します。

php blackops make:operation Welcome/ShowWelcome --type=welcome.show

Commandは次の3 Fileを生成します。

app/Feature/Welcome/ShowWelcome/ShowWelcome.php
app/Feature/Welcome/ShowWelcome/ShowWelcomeValue.php
app/Feature/Welcome/ShowWelcome/ShowWelcomeOutcome.php

FeatureとActionにはPascalCaseのPHP Class名を指定します。Operation Typeにはwelcome.showのようなlowercase dot-separated IDを使います。Pathは必ず2 Segmentとし、Absolute Path、Backslash、...、追加Segmentを使わないでください。

Generatorは、ValueをNative Parameter、OutcomeをNative Return Typeに持つTyped Self-handled Operationを生成します。ValueとOutcomeは空のreadonly Classです。Use Caseに必要なPropertyと処理を追加してください。

public function handle(ShowWelcomeValue $value): ShowWelcomeOutcome
{
    return new ShowWelcomeOutcome();
}

GeneratorはRoute、HTTP Method、Execution Strategy、ExecutionContextを推測しません。HTTP公開やDeferred実行が必要なOperationだけへ、それぞれのAttribute(Deferredは#[Deferred])と処理を追加してください。

Safety and Build

3 Targetの一つでも存在すると、Generatorは既存Fileを上書きせず、何も生成しません。--forceは提供しません。成功時は生成したProject Relative Pathだけを表示します。

GeneratorはFileだけを作成し、Composer、Database、Network、Artifact Buildを実行しません。生成後は通常のApplication BuildでOperationを検証してください。

php blackops build:compile

blackops/framework PackageがGenerator Stubを所有します。Framework Update後に新しく生成するFileには更新済みStubを使いますが、Applicationが所有する生成済みFileは変更しません。

Framework Updates

Project RootのblackopsはApplication所有のBootstrapであり、Framework CommandやStubのCopyではありません。通常のComposer Updateでblackops/frameworkを更新すると、Entrypointを変更せずに更新後のmake:operationmake:migrationmake:seederとStubを利用できます。

composer update blackops/framework

Framework Updateは既に生成したOperation/MigrationをUpgradeしません。生成済みSourceはApplication所有のままbyte-for-byte維持し、新しいStubはUpdate後に新規生成するFileだけへ反映します。Stub Contractに互換性対応が必要なReleaseでは、そのReleaseのUpgrade Guideを確認してください。

Migrationを生成する

Application固有のDatabase変更はPascalCaseのDescriptionから生成します。

php blackops make:migration CreateOrdersTable

CommandはUTCの現在時刻から次のFileを作ります。

migrations/VersionYYYYMMDDHHMMSS.php

生成ClassはApp\Migrations NamespaceでDoctrine AbstractMigrationを継承し、Descriptionと空のup()down()を持ちます。必要なSQLを追加してから、既存のDatabase CommandでFramework Migrationと一緒に確認・適用してください。

php blackops database:status
php blackops database:migrate --dry-run
php blackops database:migrate

Commandは最初の生成時だけmigrations/を作ります。同じ秒のVersion Fileがすでに存在する場合は上書きせず失敗します。CommandはFile生成だけを行い、Database接続、Migration適用、Composer更新、Artifact Buildを行いません。

Seederを生成する

Application固有のSeederはPascalCaseのClass名から生成します。Slashで区切るとSeed Directory内へNestできます。

php blackops make:seeder DatabaseSeeder
php blackops make:seeder Catalog/ProductSeeder
app/Infrastructure/Seed/DatabaseSeeder.php
app/Infrastructure/Seed/Catalog/ProductSeeder.php

生成ClassはBlackOps\Database\Seederを実装し、空のrun(): voidを持ちます。Database接続、Migration、Build、Seed実行、Rootへの自動登録は行いません。子Seederの実行順はRoot DatabaseSeederへ明示してください。詳しくはSeederを参照してください。