Symfony Advent Calendar 2021 - 7日目の記事です!

Symfonyには makeコマンド - MakerBundle というめちゃくちゃ便利なコマンドがあります :bulb:
これを使うと、EntityやControllerを簡単に作成することができます。configファイルもいい感じにしてくれます:clap:
今回はそのmakeコマンドの中で「よく使う系」と「こんなのもあるよ系」コマンドを勝手に紹介します!
makeコマンドを使い倒してみたリポジトリを置いておくので、よかったら参考にしてください。
https://github.com/kin29/maker-bundle-practice

よく使う系

make:entity: Entityを作成する

こんな感じで、対話型:loudspeaker:で必要なプロパティを追加できます。

$ bin/console make:entity

 Class name of the entity to create or update (e.g. FierceElephant):
 > FierceElephant

 created: src/Entity/FierceElephant.php
 created: src/Repository/FierceElephantRepository.php

 Entity generated! Now let's add some fields!
 You can always add more fields later manually or by re-running this command.

 New property name (press <return> to stop adding fields):
 > name

 Field type (enter ? to see all types) [string]:
 > string

 Field length [255]:
 > 255

 Can this field be null in the database (nullable) (yes/no) [no]:
 > ysa

 updated: src/Entity/FierceElephant.php

 Add another property? Enter the property name (or press <return> to stop adding fields):
 >



  Success!


 Next: When you're ready, create a migration with php bin/console make:migration

Next: When you're ready, create a migration with php bin/console make:migration

とある通り、migrationsファイルが必要な場合は以下で作成します。親切ですね:relaxed:
$ bin/console make:migration

UserEntityの場合はmake:userを使うと、configもいい感じに設定してくれます。

$ bin/console make:user

 The name of the security user class (e.g. User) [User]:
 > 

 Do you want to store user data in the database (via Doctrine)? (yes/no) [yes]:
 > 

 Enter a property name that will be the unique "display" name for the user (e.g. email, username, uuid) [email]:
 > 

 Will this app need to hash/check user passwords? Choose No if passwords are not needed or will be checked/hashed by some other system (e.g. a single sign-on server).

 Does this app need to hash/check user passwords? (yes/no) [yes]:
 > 

 created: src/Entity/User.php
 created: src/Repository/UserRepository.php
 updated: src/Entity/User.php
 updated: config/packages/security.yaml

           
  Success! 
           

 Next Steps:
   - Review your new App\Entity\User class.
   - Use make:entity to add more fields to your User entity and then run make:migration.
   - Create a way to authenticate! See https://symfony.com/doc/current/security.html

make:form: FormTypeを作成する

第2引数でDTOクラスやEntityクラスを指定すると、data_classにsetした状態のFormTypeを作成できます :tada:

$ bin/console make:form GentlePuppyType GentlePuppy

 created: src/Form/GentlePuppyType.php


  Success!


 Next: Add fields to your form and start using it.
 Find the documentation at https://symfony.com/doc/current/forms.html
$ cat src/Form/GentlePuppyType.php
...
class GentlePuppyType extends AbstractType
{
    ...
    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            'data_class' => GentlePuppy::class,
        ]);
    }
}

make:validator: Validatorを作成する

ConstraintをextendsしたクラスとConstraintValidatorをextentsしたクラスが作成されます。

make:controller: Controllerを作成する

AbstractControllerをextendsしたControllerが作成されます。
プレーンなControllerができるオプションとかあれば嬉しいですね。 MakeControllerクラスを拡張して独自コマンドを作るのが良さそうですね。

こんなのもあるよ系

make:registration-form: ユーザ登録画面追加

こんな感じの立派なユーザ登録フォームができます:laughing:

register_form

$ bin/console make:registration-form

 Creating a registration form for App\Entity\User
 ...

 updated: src/Entity/User.php
 updated: src/Entity/User.php
 created: src/Security/EmailVerifier.php
 created: templates/registration/confirmation_email.html.twig
 created: src/Form/RegistrationFormType.php
 created: src/Controller/RegistrationController.php
 created: templates/registration/register.html.twig

make:registration-form: リセットメールアドレス画面追加

reset_password_form

$ bin/console make:reset-password
...

 created: src/Controller/ResetPasswordController.php
 created: src/Entity/ResetPasswordRequest.php
 updated: src/Entity/ResetPasswordRequest.php
 created: src/Repository/ResetPasswordRequestRepository.php
 updated: src/Repository/ResetPasswordRequestRepository.php
 updated: config/packages/reset_password.yaml
 created: src/Form/ResetPasswordRequestFormType.php
 created: src/Form/ChangePasswordFormType.php
 created: templates/reset_password/check_email.html.twig
 created: templates/reset_password/email.html.twig
 created: templates/reset_password/request.html.twig
 created: templates/reset_password/reset.html.twig

make:crud: エンティティのCRUD作成して一覧が見れるようにする

簡単にindex・new・edit・showの画面ができます :clap:

crud_page

$ bin/console make:crud

    The class name of the entity to create CRUD (e.g. DeliciousPopsicle):
    > VictoriousPizza

    Choose a name for your controller class (e.g. VictoriousPizzaController) [VictoriousPizzaController]:
    >

    created: src/Controller/VictoriousPizzaController.php
    created: src/Form/VictoriousPizzaType.php
    created: templates/victorious_pizza/_delete_form.html.twig
    created: templates/victorious_pizza/_form.html.twig
    created: templates/victorious_pizza/edit.html.twig
    created: templates/victorious_pizza/index.html.twig
    created: templates/victorious_pizza/new.html.twig
    created: templates/victorious_pizza/show.html.twig


    Success!


    Next: Check your new CRUD by going to /victorious/pizza/

(試しにUserEntityで作ってみると、passwordとか見えてしまう危ないものができました:sweat_smile:

独自のmakeコマンドを作ることもできる

公式ドキュメントにある通り、AbstractMaker を拡張して簡単に独自コマンドも作れるとのことのです。
make:dto作りたいなと個人的に思いました。
何かいいmakeコマンド作ったら教えて下さーい :raising_hand: