[PHP]Symfony 4 とデータベースを使ったCRUDアプリケーションの作り方

Pocket

Symfony 4 と MySQL などのデータベースの組み合わせで基本的なアプリケーションを作っていきます。今回は例としてブログ風に記事を表示できるようにします。

Symfony 本体のインストール

Composer を使って本体をインストールします。「symfony-crud」の部分はプロジェクト名なので必要に応じて変更して下さい。

composer create-project symfony/skeleton symfony-crud

Doctrine のインストールとデータベース周辺の設定

まずはデータベースを操作するためのライブラリをインストールします。

composer require doctrine maker

インストールが完了すると .env ファイルにデータベースへの接続設定に関する項目が書き足されます。
DATABASE_URL の箇所を接続するデータベースに合わせて書き換えて下さい。

DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name
SQLite を使う場合は次のようにします。
DATABASE_URL=sqlite:///%kernel.project_dir%/var/data.db

接続するデータベースはあらかじめ用意しておくか、コマンドから作成することもできます。

php bin/console doctrine:database:create

次にエンティティ(モデル)を作成します。今回は記事を表す Post という名前で作っていきます。記事にはID、タイトル、本文、作成日時を持たせます。「Post」の部分は好きな名前をつけることができます。

php bin/console make:entity Post

エンティティのフィールド(タイトルなど)は対話式で作っていきます。コンソールで、カラム名やタイプを聞かれるのでそれを指定するだけで自動的に作られます。中断した場合でも上記コマンドで再度編集できます。今回は下記の列を用意します。

  • id integer(最初からあります)
  • title string, length=100
  • content text
  • created_at datetime, nullable

マイグレーション(テーブルの作成)はエンティティを作ってしまえばその情報をもとに自動的に作ることができるので自分でファイルを用意する必要はありません。下記のコマンドで現在のデータベースとの差分をもとにマイグレーションファイルが作られます。

php bin/console doctrine:migrations:diff

ファイルが作成されたら実際にデータベースにテーブルを作成します。

php bin/console doctrine:migrations:migrate

フォームの作成

登録するためのデータを入力してもらうためにはテキストボックスなどの入力フォームが必要になります。まずはフォームに必要なコンポーネントと、CSRF(クロスサイトリクエストフォージェリ)対策のためのコンポーネントをインストールします。

composer require form
composer require symfony/security-csrf

次に src/Form フォルダを用意し、PostType.php というファイルを作ります。

<?php
namespace App\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\OptionsResolver\OptionsResolver;

class PostType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title')
            ->add('content')
            ->add('created_at')
            ->add('save', SubmitType::class);
    }
}

buildForm() の箇所で表示したい入力項目を追加します。今回はタイトル、本文、作成日時、保存ボタンです。


Similar Posts:




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です