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

5.2版本
保持 没有维护的
5.0

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

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

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

EasyAdminを設定する

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

1
$ 欧宝娱乐app下载地址symfony composer req“管理:^ 3”

Easyadminは特价ななコントローラー,アプリケーションアプリケーションの定理者を自动的に作物。特点なコントローラを保存する,新闻SRC / Controller / Admin /ディレクトリを作りましょう。

1
美元mkdir / Admin / src /控制器

easyadminを使い始めるにあたって,webサイトサイトデータデータを定理するメインの入口になるなるなる者ダッシュボードボードをりましょましょましょましょましょましょ

1
$ 欧宝娱乐app下载地址symfony控制台make:admin:dashboard

デフォルトの答えをそのまま選んでいくと次のようなコントローラーができます:

src /控制器/ Admin / DashboardController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 22 21 22 29 29 29 29 29 29 29 29 30
名称空间应用程序控制器\ \管理;使用EasyCorp \ Bundle \ Easyadminbundle \ Config \ Dashboard;使用EasyCorp \包\ EasyAdminBundle \ Config \子菜单;使用EasyCorp \ Bundle \ Easyadminbundle \ Controller \ AbstractDashboardController;使用欧宝娱乐app下载地址symfony \ component \ httpfoundation \ response;使用欧宝娱乐app下载地址Symfony \ Component \ Routing \ Annotation \ Route;班级DashboardController延伸AbstractDashboardController{/ * ** @route(“/ admin”,name =“admin”)* /公共函数指数()响应{返回父母::指数();}公共函数sextenceashboard.()仪表盘{返回仪表盘::()->定点'留言');}公共函数configuremenuItems.()迭代{收益率menuitem.::linktodashboard'仪表盘'“fa fa-home”);//收益menuiuem :: linktocrud('label','图标类',entityclass :: class);}}

慣例により全ての管理者用コントローラーは应用程序控制器\ \管理というネームスペースに保存されます。

生成された管理者用バックエンドには,指数()メソッドに対して设定した/管理からアクセスできます。このURLは何でも好きなものに変更することができます:

ドーン!素敵必要ができましたできインターフェースにてカスタマイズマイズますますますますできできできできます。

次のステップでは,カンファレンスとコメントを管理するためのコントローラーを作ります。

ダッシュボードのコントローラの中间,“Cruds”へへのリンクリンクを追するというコメントコメントが入っconfiguremenuitem()メソッドメソッドがあることことに気づいたたCRUDは“创建、读取、更新、删除”(作成,参照,更新,削除)の頭文字を取った略語で,エンティティに対して行う4つの基本的な操作です。この4つはまさに管理者画面でやりたいことです。EasyAdminでは検索と絞り込みもできるので、次のレベルまで対応しています。

カンファレンスカンファレンスのためののの作战ってみみ:

1
$ 欧宝娱乐app下载地址symfony控制台:admin:crud

カンファレンスの管理者画面を作战る1を選び,残りの質問にはデフォルトの答えを選んでください。次のようなファイルが作成されます:

src / controller / admin / conferencecrudcontroller.php
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
名称空间应用程序控制器\ \管理;使用App \ Entity \会议;使用EasyCorp \ Bundle \ Easyadminbundle \ Controller \ AbstractCrudController;班级ConferenceCrudController延伸AbstractCrudController{公共静止的函数getEntityFqcn()细绳{返回会议::班级;}/ *公共函数configurefields(String $ pagename):erable{返回 [Idfield :: new('id'),TextField :: New('标题'),TextEditorField::新(描述),];}* /}

コメントについても同じことをします:

1
$ 欧宝娱乐app下载地址symfony控制台:admin:crud

最後のステップでは,カンファレンスとコメントの管理者用CRUD画面をダッシュボードにリンクします:

patch_file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18 19 20 21 22
——/ src /控制器/ Admin / DashboardController.php+ + + b / src /控制器/ Admin / DashboardController.php@@ 2,6 +2,8 @@名称空间的应用程序控制器\ \管理;+使用app \ entity \评论;+使用App \实体\会议;使用easycorp \ bundle \ easyadminbundle \ config \ dashboard;使用easycorp \ bundle \ easyadminbundle \ config \ menuiuem;使用easycorp \ bundle \ easyadminbundle \ controller \ AbstractDashboardController;@@ -26,7 +28,8 @@类DashboardController扩展了AbstractDashboardControllerpublic function configuremenuems():erable {- 产量menuiuem :: linktodashboard('仪表板','fa fa-home');- // yield MenuItem::linkToCrud('The Label', 'fas fa-list', EntityClass::class);+ yield MenuItem::linktoRoute('返回网站','fas fa-home', '主页');+产量menuiuem :: linktocrud('会议','fas fa-map-marker-alt',会议:: class);+产量menuiuem :: linktocrud('评论','fas fa-comments',评论:: class);}}

configuremenuitems()メソッドを上書きして,関連するアイコンつきのメニューを追加し,更にWebサイトのトップページに戻るリンクも追加しました。

EasyAdminでは子菜单:linkToRoute ()メソッドにより,エンティティのCRUDに簡単にリンクするAPIを公開しています。

メインのダッシュボードページは現時点では空っぽです。ダッシュボードは,様々な統計や関連情報を表示することができる場所です。ダッシュボードに表示したい重要事項は特にないので,カンファレンス一覧にリダイレクトすることにしましょう。

patch_file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18 19 20 21 22
——/ src /控制器/ Admin / DashboardController.php+ + + b / src /控制器/ Admin / DashboardController.php@@ -7,6 +7,7 @@使用app \ entity \会议;使用easycorp \ bundle \ easyadminbundle \ config \ dashboard;使用easycorp \ bundle \ easyadminbundle \ config \ menuiuem;使用easycorp \ bundle \ easyadminbundle \ controller \ AbstractDashboardController;+使用easycorp \ bundle \ easyadminbundle \ router \ crudurlgenerator;组件使用欧宝娱乐app下载地址Symfony \ \ HttpFoundation \反应;使用Sy欧宝娱乐app下载地址mfony \组件\路由\注释\路线;@@ -17,7 +18,10 @@类DashboardController扩展了AbstractDashboardController*/ public function index(): Response {- 返回父:: index();+ $ loutebuilder = $ this-> get(crudurlgenerator :: class) - > build();+ $url = $routeBuilder->setController(ConferenceCrudController::class)->generateUrl();++返回$ this - >重定向($ url);}公共函数configureDashboard():仪表板

エンティティのリレーション(コメントと紐づくカンファレンス)を表示するとき,EasyAdminはカンファレンスの文字列としての表現を使おうとします。エンティティに__toString ()マジックメソッドが定義されていなければ,デフォルトとしてエンティティの名前と主キーを利用します(会议#1のようようにに表示表示をより意味意味あるものにするするためにはは,会议クラスにメソッドをを加しましょう:

patch_file
12 3 4 5 6 7 8 9 10 11 12 13 14
——/ src /实体/ Conference.php+++ B / SRC / ENTITY / CONELTS.PHP@@ -44,6 +44,111 @课堂会议$this->comments = new ArrayCollection();}+ public function __toString(): string+ {+返回这个 - >城市。'。$这个 - >一年;+}+public function getId(): ?int {return $this->id;

评论クラスクラスも同じようようにしましょう

patch_file
12 3 4 5 6 7 8 9 10 11 12 13 14
——/ src /实体/ Comment.php+++ B / SRC / ENTITY / COMENTS.PHP@@ -48,6 +48,​​11 @ _课程评论* /私人photoFilename美元;+ public function __toString(): string+ {+返回(字符串)$ this-> getemail();+}+public function getId(): ?int {return $this->id;

これで,管理者者バックエンドカンファレンス直接追にたましましたたたた。

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

Easyadminをカスタマイズする

:

patch_file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 21 22 23 32 32 32 29 32 32 32 32 32 32 42 42 43 42 43 44 44 44 44 49 49 49 49 45 49 49 4051 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
——/ src /控制器/ Admin / CommentCrudController.php+++ b / src / controller / admin / comminycrudcontroller.php@@ -3,7 +3,15 @@名称空间的应用程序控制器\ \管理;使用App \实体\评论;+使用EasyCorp \ \ EasyAdminBundle \ Config \ Crud捆绑销售;+使用easycorp \ bundle \ easyadminbundle \ config \筛选器;控制器使用EasyCorp \包\ EasyAdminBundle \ \ AbstractCrudController;+使用easycorp \ bundle \ easyadminbundle \ field \ AssociationField;+使用easycorp \ bundle \ easyadminbundle \ field \ datetimefield;+使用easycorp \ bundle \ easyadminbundle \ field \电子邮件域;+使用EasyCorp \包\ EasyAdminBundle \ \ TextareaField领域;+使用easycorp \ bundle \ easyadminbundle \ field \ textfield;+使用EasyCorp \ Bundle \ Easyadminbundle \ Filter \ EntityFilter;类CommentCrudController扩展AbstractCrudController {@@ -12,14 +20,44 @@ class countedcrudcontroller扩展了抽象函数控制器返回评论::课堂;}-  / *+公共功能configurud(crud $ crud):crud+ {+返回$ crud+ - > setEntityLabelInSingular(会议评论)+  - > SetEntityLabelural('会议评论')+  - > setsearchfields(['作者','text','电子邮件'))+ ->setDefaultSort(['createdAt' => 'DESC']);+;+}++公共功能ConfigureFilters(过滤器$筛选器):过滤器+ {美元+返回过滤器+ - - - - - - >添加(EntityFilter::新(会议))+;+}+public function configureFields(string $pageName): iterable {- 返回 [-  Idfield :: New('ID'),——文本框::新(“标题”),-  TextEditorField :: New('描述'),- ];+收益率AssociationField::新(会议);+收益率TextField::新(“作者”);+产量电子邮件菲尔德::新('电子邮件');+产量textareafield :: new('text')+ - > hideOnIndex ()+;+收益率TextField::新(“photoFilename”)+ - > onlyOnIndex ()+;++ $createdAt = DateTimeField::new('createdAt')->setFormTypeOptions([+'html5'=> true,+ '年份' => range(date('Y'), date('Y') + 5),+'窗口小部件'=>'single_text',+]);+ if (Crud::PAGE_EDIT === $pageName) {+ yield $createdAt->setFormTypeOption('禁用',true);+} else {+收益率createdAt美元;+}}-  * /}

评论画面をカスタマイズするために,configureFields ()。

configureFilters ()メソッドでは,検索検索画面にどんな绞り込み项目表示するかかを定义ことができことができことができことができことができことができ

易达をカスタで,easyadminを使って可能ことを少しをししたたましましましまし

ことことです,后のステップでセキュアにていきますので,心配しないください。

1
$ 欧宝娱乐app下载地址symfony运行psql -c“Truncate会议重启身份级联”

  • «前ステップ8:データ構造の説明
  • 下一个 ”ステップ10:ユーザーインターフェースを構築する

这项工作,包括代码样本,是在一个Creative Commons BY-NC-SA 4.0执照。