フォーム
フォームからユーザ入力をさせる
- DBへ保存したり,データをレンダリングして表示させるのは行った
- https://symfony.com/doc/current/bundles/override.html#forms
インストール
- composer require symfony/form
最も簡単なフォーム
Controller.php
public function add(): Response {
$form = $this->createFormBuilder()
->add('title')
->add('text')
->add('submit', SubmitType::class, ['label' => 'save'])
->getForm();
return $this->renderForm(
'form.html.twig',
[
'form' => $form
]
);
}
form.html.twig
{{ form(form) }}
フォームの送信処理
フォーム送信のためにフォームをレンダリング
- アクション内の現在のリクエストにアクセス
- リクエスト中に送信されるデータをフォームに取得させる
- バリデーションを加えると良い
$microPost = new MicroPost();
$form = $this->createFormBuilder($microPost)
->add('title')
->add('text')
->add('submit', SubmitType::class, ['label' => 'save'])
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$post = $form->getData();
$post->setCreated(new DateTime());
$posts->save($post, true);
}
フォーム送信時のフラッシュメッセージ・リダイレクト
フラッシュメッセージは1リクエストにつき1つ
// add a flash
$this->addFlash('success', 'success!!');
// redirect
return $this->redirectToRoute('micro_post_index');
フォームのカスタマイズ
Twigを変更して色々カスタマイズが可能
フォームクラスの作成
symfony console make:form
- 自動でフォームクラスを生成
- FormType名を入力
- Entityの名称に準ずるFormTypeが作成される
その他
App\Entity\MicroPost object not found by the @ParamConverter annotation. のエラー
- ルートにpriority: 2を追加