こんにちは!Symfonyアドベントカレンダー 18日目です
今回は、Symfony4を使って、簡単なフォームを作成してみたいと思います!
こちらの過去記事が参考になりました! Symfony4をインストールして”Hello World”を表示させるまでの手順
動作環境
- Symfony4.4.0
Symfony Standard Edition → Symfony Flex
Symfony4では、Symfony Standard Editionはサポート対象外となり、Symfony Flexを採用しています。
- composer.json
"require": {
"symfony/flex": "^1.3.1",
},
"conflict": {
"symfony/symfony": "*"
},
手順
プロジェクトの作成
$ composer create-project symfony/website-skeleton hello-symfony4
Installing symfony/website-skeleton (v4.4.99)
- Installing symfony/website-skeleton (v4.4.99): Downloading (100%)
Created project in hello-symfony4
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing symfony/flex (v1.4.8): Loading from cache
Symfony operations: 1 recipe (92084fadae9fb1e6399edca5469bc31d)
- Configuring symfony/flex (>=1.0): From github.com/symfony/recipes:master
Loading composer repositories with package information
Updating dependencies (including require-dev)
Restricting packages listed in "symfony/symfony" to "4.4.*"
...
(symfony/flex
をインストールしてますねえ)
env(DB)設定
ローカル用のenvファイルを作ります。
$ cp .env .env.local
ローカルDBの接続情報に書き換えます
$ vi .env.local
きちんと接続されているか確認します
$ bin/console doctrine:migrations:status
== Configuration
>> Name: Application Migrations
>> Database Driver: pdo_mysql
>> Database Host: 127.0.0.1
>> Database Name: hello_symfony4 //指定したDB名がはいります
...
serverをいれる
ローカルサーバを立てるコマンドが欲しいので導入します。
$ composer req server
Symfony Flexのおかげで、server
というエイリアスでインストールが可能となっています。
これで無事、ローカルでwebサイトの表示確認ができるようになりました。
$ bin/console server:start
[OK] Server listening on http://127.0.0.1:8000
コマンドが不要な場合は、$ php -S 127.0.0.1:8000 -t public/
でも確認ができます。
Symfony4.4ではWelcomeページがガラッと変わりカッコよくなりましたね!!!
いろんなカラーバージョンがあるようなので、何回かリロードしてみてください
Symfony Profilerがダークモード対応してますねえ!目に優しくていいです
コントローラを作る
$ bin/console make:controller FormController
created: src/Controller/FormController.php
created: templates/form/index.html.twig
Success!
Next: Open your new controller class and add some pages!
これだけで、こんな画面ができます。
フォームを作る
- src/Controller/CommentController.php
<?php
namespace App\Controller;
use ...
class CommentController extends AbstractController
{
/**
* @Route("/comment", name="comment")
* @param Request $request
* @return Response
*/
public function index(Request $request): Response
{
$message = '↑ input, and submit';
$form = $this->createFormBuilder()
->add('name')
->add('comment')
->add('submit', SubmitType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$message = "Thanks, {$data['name']}";
}
return $this->render('comment/index.html.twig', [
'form' => $form->createView(),
'message' => $message
]);
}
}
- templates/comment/index.html.twig
{% extends 'base.html.twig' %}
{% block title %}Hello Symfony4!{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="example-wrapper">
<h1>Hello, Symfony Advent Calendar 18th!!</h1>
{{ form(form) }}
{{ message }}
</div>
{% endblock %}
ついに、簡単なフォームが完成しました
最後に
フォームに関してSymfony4.0よりif($form->isValid())
のみだとCannot check if an unsubmitted form is valid. Call Form::isSubmitted() before Form::isValid().
と言われちゃいます。
また、Symfony4.4からWeek Form Typeというものが追加されたみたいです。次回はこのことについて書きたいと思います!!!
個人的には、Welcomeページが4.3→4.4で大きくリニューアルされていてびっくりしました!
ダークモードもあったりで、ますます開発しやすくなって嬉しいです。ありがとうございます