SymfonyWorld Online 2020
100% online
30+ talks + workshops
Live + Replay watch talks later

ステップ 9: 管理者用のバックエンドをセットアップする

5.0 version
Maintained

管理者用のバックエンドをセットアップする

データベースに次のカンファレンスを追加するのは、プロジェクトの管理者の仕事です。 管理者用のバックエンド は、Webサイトの保護された場所となり、そこで プロジェクト管理者 は、Webサイトのデータを管理したり、フィードバックをモデレートしたりできます。

早く作成するのにどうしましょうか?プロジェクトのモデルに基づく管理者用のバックエンドを生成することができる EasyAdmin バンドルを使いましょう。

EasyAdmin を設定する

まず、EasyAdmin をプロジェクトの依存に追加します:

1
$ symfony composer req "admin:^2"

EasyAdmin を設定するのに、Flexレシピで新しい設定ファイルを生成します:

config/packages/easy_admin.yaml
1
2
3
4
5
6
#easy_admin:
#    entities:
#        # List the entity class name you want to manage
#        - App\Entity\Product
#        - App\Entity\Category
#        - App\Entity\User

このように、ほとんどのインストールされたパッケージは、 config/packages ディレクトリに設定を1つ持っています。ほとんどのアプリケーションで動作するように、デフォルトが設定されています。

最初のいくつかのコメントアウト行を取って、プロジェクトのモデルクラスを追加しましょう:

config/packages/easy_admin.yaml
1
2
3
4
easy_admin:
    entities:
        - App\Entity\Conference
        - App\Entity\Comment

生成された admin の管理者用バックエンドへアクセスしてみてください。Boom! カンファレンスとコメントの素敵でリッチなインターフェースができました:

ちなみに

なぜ バックエンドは /admin 以下でアクセス可能になっているのでしょうか?それは、 config/routes/easy_admin.yaml にデフォルトとして設定してあるからです:

config/routes/easy_admin.yaml
1
2
3
4
easy_admin_bundle:
    resource: '@EasyAdminBundle/Controller/EasyAdminController.php'
    prefix: /admin
    type: annotation

好きなように変更することができます。

まだカンファレンスとコメントを追加することはできません。 次のようなエラーが出ます。Object of class App\Entity\Conference could not be converted to string EasyAdmin はコメントに関連したカンファレンスを表示しようとしますが、カンファレンスオブジェクトを文字列として表示できないといけません。 Conference クラスに __toString() メソッドを追加して修正しましょう。

patch_file
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--- a/src/Entity/Conference.php
+++ b/src/Entity/Conference.php
@@ -44,6 +44,11 @@ class Conference
         $this->comments = new ArrayCollection();
     }

+    public function __toString(): string
+    {
+        return $this->city.' '.$this->year;
+    }
+
     public function getId(): ?int
     {
         return $this->id;

Comment クラスと同じようにしましょう:

patch_file
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
--- a/src/Entity/Comment.php
+++ b/src/Entity/Comment.php
@@ -48,6 +48,11 @@ class Comment
      */
     private $photoFilename;

+    public function __toString(): string
+    {
+        return (string) $this->getEmail();
+    }
+
     public function getId(): ?int
     {
         return $this->id;

これで、管理者用バックエンドからカンファレンスを直接追加/変更/削除することができるようになりました。一つ以上カンファレンスを作成して遊んでみましょう。

写真なしのコメントを追加しましょう。ここでは日付は手動でセットしましょう; 後のステップで createdAt カラムを自動的にセットするようにします。

EasyAdmin をカスタマイズする

デフォルトの管理者用のバックエンドが正しく動くようになりましたが、カスタマイズしてさらに改善することができます。簡単な修正をしてどんなことができるか見てみましょう。現在の設定を次のように変更してみましょう:

config/packages/easy_admin.yaml
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
easy_admin:
    site_name: Conference Guestbook

    design:
        menu:
            - { route: 'homepage', label: 'Back to the website', icon: 'home' }
            - { entity: 'Conference', label: 'Conferences', icon: 'map-marker' }
            - { entity: 'Comment', label: 'Comments', icon: 'comments' }

    entities:
        Conference:
            class: App\Entity\Conference

        Comment:
            class: App\Entity\Comment
            list:
                fields:
                    - author
                    - { property: 'email', type: 'email' }
                    - { property: 'createdAt', type: 'datetime' }
                sort: ['createdAt', 'ASC']
                filters: ['conference']
            edit:
                fields:
                    - { property: 'conference' }
                    - { property: 'createdAt', type: datetime, type_options: { disabled: true } }
                    - 'author'
                    - { property: 'email', type: 'email' }
                    - text

design セクションを上書きして、メニューアイテムにアイコンを追加し、Webサイトのホームページへ戻るリンクも追加しました。

Comment セクションでは、フィールドをリスト化することで好きなように順序付けすることがでできるようになりました。作成日はリードオンリーにセットするなどフィールドを微調整しました。 filters セクションは、検索フィールドのフィルターを定義しています。

これらのカスタマイズで、EasyAdmin を使って可能なことを少し紹介をしました。

カンファレンスでコメントをフィルターしたり、メールアドレスでコメントを検索したりして、管理者画面を遊んでみてください。問題が一つあるとすれば、誰もがバックエンドにアクセスできるようになっていることですが、後のステップでセキュアにしていきますので、心配しないでください。

1
$ symfony run psql -c "TRUNCATE conference RESTART IDENTITY CASCADE"

  • « Previous ステップ 8: データ構造の説明
  • Next » ステップ 10: ユーザーインターフェースを構築する

This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.