こんにちは!Symfonyアドベントカレンダー 18日目です :christmas_tree::crescent_moon:

今回は、Symfony4を使って、簡単なフォームを作成してみたいと思います!

こちらの過去記事が参考になりました! :point_right: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ページがガラッと変わりカッコよくなりましたね!!!

いろんなカラーバージョンがあるようなので、何回かリロードしてみてください :ok_woman:

127 0 0 1_8002_

Symfony Profilerがダークモード対応してますねえ!目に優しくていいです :ok_hand:

127 0 0 1_8002__profiler_c20a81_panel=exception

コントローラを作る

$ 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!

これだけで、こんな画面ができます。

127 0 0 1_8002_form

フォームを作る

  • 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 %}

ついに、簡単なフォームが完成しました :tada:

スクリーンショット 2019-12-17 23 46 58

最後に

フォームに関して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で大きくリニューアルされていてびっくりしました!

ダークモードもあったりで、ますます開発しやすくなって嬉しいです。ありがとうございます :bow: