Symfony Advent Calendar 2021 - 7日目の記事です!
Symfonyには makeコマンド - MakerBundle というめちゃくちゃ便利なコマンドがあります
これを使うと、EntityやControllerを簡単に作成することができます。configファイルもいい感じにしてくれます
今回はそのmakeコマンドの中で「よく使う系」と「こんなのもあるよ系」コマンドを勝手に紹介します!
makeコマンドを使い倒してみたリポジトリを置いておくので、よかったら参考にしてください。
https://github.com/kin29/maker-bundle-practice
よく使う系
make:entity
: Entityを作成する
こんな感じで、対話型で必要なプロパティを追加できます。
$ 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ファイルが必要な場合は以下で作成します。親切ですね
$ 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を作成できます
$ 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
: ユーザ登録画面追加
こんな感じの立派なユーザ登録フォームができます
$ 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
: リセットメールアドレス画面追加
$ 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の画面ができます
$ 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とか見えてしまう危ないものができました)
独自のmakeコマンドを作ることもできる
公式ドキュメントにある通り、AbstractMaker を拡張して簡単に独自コマンドも作れるとのことのです。
make:dto
作りたいなと個人的に思いました。
何かいいmakeコマンド作ったら教えて下さーい