【HelloWorldから】Symfony【DB登録まで】

この記事でできること。

  • Symfonyのプロジェクト作成
  • トップページ作成
  • From作成
  • From送信でDBへ登録

サクッと作っていきましょう。

MAMPのインストール

DBが必要なのでビルトインサーバーは使いません。

Symfonyプロジェクト作成

フレームワークなので、Symfonyのプロジェクトがないと始まりません。

ターミナルでコマンド実行しましょう。

ComposerやPHPの環境構築などできていないよって方は、こちらを参考にしてみてください。

composer create-project symfony/website-skeleton:"^4.4" symfony-app

構築できたらプロジェクトディレクトリに移動します。

cd symfony-app

MAMPのwebサーバーはapacheなので、apache-packを追加します。

composer require symfony/apache-pack

質問はyesで進めてください。

これで環境が整いました!

トップページ作成

ページの新規作成

初期ページは404なので、新しくページを作成します。

これもコマンドで行います。

php bin/console make:controller

対話形式で初めにコントローラーの名前を聞かれるので、「HelloController」と入力してenter。

これでcontrollerとtwigが作成されました。

一度ブラウザで確認してみましょう。

私の場合は「 http://localhost:8888/symfony-app/public/hello 」で開けました。

トップページへ変更

URLを、symfony-app/public/hello → /symfony-app/public/ に変更してみましょう。

/src/controller/ を確認するとHelloController.phpがコマンドで作成されているので開きます。

アノテーションを変更します。

/**
  * @Route("/", name="")
  */

変更したらブラウザで「 http://localhost:8888/symfony-app/public/ 」を開きます。

先ほどと同じページが表示されていたら成功です。

From作成

Formはこちらの記事を参考にしてください。

Form作成が終わったら、DB登録へ進みます。

DBとテーブルの作成

DBの接続設定

まずはDBへの接続が必要なので、DB接続用の設定ファイルを変更します。

/.env ファイルを変更。

DATABASE_URL="mysql://root:root@127.0.0.1:8889/practice?serverVersion=5.7"

DB作成

下記コマンドでテーブルを作成します。

先ほど .envファイルに設定したpracticeという名前でDBが作成されます。

 php bin/console doctrine:database:create

コマンド実行したらphpmyadminでDBが作成されていることを確認しましょう。

テーブルの作成

テーブルもコマンドで作成します。

基本的にコマンドでできるので、使えるものは使っていきます。というか、コマンドなしではかなりしんどいです。

php bin/console make:entity

コマンド実行するとまずはテーブル名を聞かれるので、「 Register 」とします。

次にカラム名を聞かれるので、「change_text」とします。

残りは全てenterでokです。

これでRegisterテーブル作成の準備ができました。

マイグレーションファイルの作成

マイグレーションファイルとは、DBの設計図のようなものです。

ここで全て管理されていて、先ほどテーブルを作成するコマンドを使用したので、マイグレーションファイルを作成します。

これもコマンドで生成します。

php bin/console make:migration

マイグレーションファイルの実行

マイグレーションファイルというDBの設計図をデータベースへ反映させてあげます。

コマンド実行します。

php bin/console doctrine:migrations:migrate

phpmyadminでテーブルが追加されているか確認してみましょう。

Formの値をDBへ登録する

お気づきかもしれませんが、RegisterTypeとRegisterテーブルの値が同じにしています。

こうすることで、Form送信と同時にDBへ値を登録することができます。

少し変更が必要なので、修正していきましょう。

From生成の時にテーブルを渡す

RegisterController.phpの記述を変更します。

$form = $this->createForm(RegisterType::class, new Register());

Registerエンティティを渡しました。

エンティティとはテーブルそのものです。厳密には違うかもしれませんが、それぐらいの認識で大丈夫です。

エンティティを使う準備をする

エンティティを使用するには使うための記述が必要です。

下記を追加します。

use App\Entity\Register;

Fromで送信された値をDBへ登録する

コードを追加します。

        // POST通信だったら
        if ($request->getMethod() == 'POST') {
            // 送信されたデータをハンドリングする
            $form->handleRequest($request);

            // formのデータを取得
            $register = $form->getData();
            // エンティティマネージャーを取得
            $em = $this->getDoctrine()->getManager();
            // エンティティマネージャーにデータを紐付ける
            $em->persist($register);
            // データを流す(登録する)
            $em->flush();
        }

リクエストクラスを使えるようにする

POST通信の判定でgetMethod()メソッドを使用していますが、エラーになっています。

使えるようにしてあげます。

まずはuseで下記を追加します。

use Symfony\Component\HttpFoundation\Request;

さらに、これをindexメソッドの引数に渡します。

これはこう言うものと思ってください。よく使います。

public function index(Request $request): Response

送信テスト

準備は全て整ったので、「 http://localhost:8888/symfony-app/public/register 」にアクセスし、form送信してみましょう。

これでDBに値が登録されるので、phpmyadminで確認してみてください。

まとめ

DBに値を登録することができましたでしょうか。

あとはこの値を取得して表示できれば簡単なアプリケーションも作成できます!

記事は作成中になりますが近日中にアップします🙇‍♂️

この記事を書いた人

ホクト

プログラミングと嫁が好き。文系出身ながら機械メーカーで電気設計→Webがしたくて退職を決意→転職。電気設計で役に立つweb知識を中心に書きます。