步骤9:设置管理后端

5.2版本
维护 没有维护的
5.0

设置管理后端

将即将召开的会议添加到数据库中是项目管理员的工作。一个管理后台网站的受保护部分在哪里项目管理员可以管理网站数据,适度的反馈提交,等等。

我们怎样才能创造这么快的速度?通过使用一个bundle,它能够基于项目的模型生成一个管理后端。EasyAdmin完全符合这个要求。

配置EasyAdmin

首先,将EasyAdmin添加为项目依赖性:

1
$ ob娱乐下载Symfony Composer Req“admin:^ 3”

EasyAdmin根据特定控制器自动为您的应用程序生成管理区域。创建一个新的/管理/ src /控制器我们将存储这些控制器的目录:

1
$ mkdir src / controller / admin /

开始使用EasyAdmin,让我们生成一个“web管理仪表板”,这将是管理网站数据的主要入口点:

1
$ ob娱乐下载symfony控制台make:admin:dashboard

接受默认答案将创建以下控制器:

src / controller / 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
名称空间app \ controller \ admin;EasyCorp \包\ EasyAdminBundle \ Config \ Dashboard;EasyCorp \ bundle \ easyadminbundle \ config \ menuiuem;EasyCorp \包\ EasyAdminBundle \ \ AbstractDashboardController控制器;ob娱乐下载Symfony \ HttpFoundation \ \组件响应;ob娱乐下载Symfony组件\ \路由\注释\路线;班级仪表板控制器扩展AbstractDashboardController.{/ * ** @Route (" / admin”、名称=“admin”)* /公共功能指数():响应{返回::指数();}公共功能configureDashboard():指示板{返回指示板::新的()->setTitle(“留言板”);}公共功能configureMenuItems():可迭代的{屈服menuitem.::linktoDashboard('仪表盘',“fa fa-home”);// yield MenuItem::linkToCrud('The Label', 'icon class', EntityClass::class);}}

按照约定,所有管理控制器都存储在它们自己的控制器下app \ controller \ admin名称空间。

访问生成的管理后端/行政由此配置index ()方法;您可以将URL更改为您喜欢的任何内容:

繁荣!我们有一个漂亮的管理界面shell,准备定制到我们的需求。

下一步是创建控制器来管理会议和评论。

在仪表板控制器中,您可能已经注意到configureMenuItems ()关于添加链接到“CRUDS”的评论的方法。cr是“创建、读取、更新和删除”的首字母缩写,这是您希望对任何实体执行的四个基本操作。这正是我们想要管理员为我们做的;EasyAdmin甚至将它提升到了一个新的水平,它还负责搜索和过滤。

让我们为会议产生一个CRUD:

1
$ ob娱乐下载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 \ controller \ admin;应用实体\ \会议;EasyCorp \包\ EasyAdminBundle \ \ AbstractCrudController控制器;班级conferencecrudcontroller.扩展抽象扫描器{公共静态功能GetEnterityFQCN.():字符串{返回会议::班级;}/ *public function configureFields(string $pageName): iterable{返回(IdField::新(id),文本框::新(“标题”),TextEditorField::新(描述),];}* /}

对注释做同样的事情:

1
$ ob娱乐下载symfony控制台:admin:crud

最后一步是将会议和评论管理crud链接到仪表板:

patch_file.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
--- a / src / controller / admin / dashboardcontroller.php+++ b / src / controller / admin / dashboardcontroller.php@@ 2,6 +2,8 @@命名空间app \ controller \ admin;+使用app \ entity \评论;+使用app \ entity \会议;使用包EasyCorp \ \ EasyAdminBundle \ Config \仪表板;使用包EasyCorp \ \ EasyAdminBundle \ Config \子菜单;控制器使用EasyCorp \包\ EasyAdminBundle \ \ AbstractDashboardController;@@ -26,7 +28,8 @@类DashboardController扩展了AbstractDashboardControllerpublic function configureMenuItems(): iterable {- yield MenuItem::linktoDashboard('Dashboard', 'fa fa-home');- // yield MenuItem::linkToCrud('The Label', 'fas fa-list', EntityClass::class);+产量menuiuem :: linktoroute('回到网站','fas fa-home','主页');+ yield MenuItem::linkToCrud('Conferences', 'fas fa-map-marker-alt', Conference::class);+产量menuiuem :: linktocrud('评论','fas fa-comments',评论:: class);}}

我们已经推翻了configureMenuItems ()方法为会议和评论添加带有相关图标的菜单项,并添加返回网站主页的链接。

EasyAdmin公开了API,以便通过通过该API轻松链接到实体CRUDSMenuItem :: linktoroute()方法。

现在主仪表板页面是空的。这是您可以显示某些统计信息的地方或任何相关信息的位置。由于我们没有任何重要的来显示,让我们重定向到会议列表:

patch_file.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
--- a / src / controller / admin / dashboardcontroller.php+++ b / src / controller / admin / dashboardcontroller.php@@ -7,6 +7,7 @@使用App实体会议;使用包EasyCorp \ \ EasyAdminBundle \ Config \仪表板;使用包EasyCorp \ \ EasyAdminBundle \ Config \子菜单;控制器使用EasyCorp \包\ EasyAdminBundle \ \ AbstractDashboardController;路由器+使用EasyCorp \包\ EasyAdminBundle \ \ CrudUrlGenerator;使用syob娱乐下载mfony \ component \ httpfoundation \响应;使用syob娱乐下载mfony \ component \ routing \ annotation \ route;@@ -17,7 +18,10 @@类DashboardController扩展了AbstractDashboardController* /公共函数索引():响应{——返回父:指数();+ $routeBuilder = $this->get(cruudurlgenerator::class)->build();+ $url = $routeBuilder->setController(ConferenceCrudController::class)->generateUrl();++返回$以下 - >重定向($ url);Public Function Medionashboard():仪表板

显示实体关系时(会议链接到评论),EasyAdmin尝试使用会议的字符串表示。默认情况下,它使用使用实体名称和主键的约定(如会议# 1)如果实体没有定义“魔法”__toString ()方法。要使显示器更加有意义,请在上添加此类方法会议类:

patch_file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
--- a / src /实体/会议.php+++ B / SRC / ENTITY / CONELTS.PHP@@ -44,6 +44,111 @课堂会议$以下 - > comments = new arraycollection();}+公共功能__tostring():字符串+ {+返回$ this - >城市。“。$ this - >;+}+公共函数getID():?int {return $ this-> id;

评论类:

patch_file.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
——/ src /实体/ Comment.php+ + + b / src /实体/ Comment.php@@ -48,6 +48,​​11 @ _课程评论* /私人$ photofilename;+公共功能__tostring():字符串+ {+返回(string) $this->getEmail();+}+公共函数getID():?int {return $ this-> id;

现在可以直接从管理后端添加/修改/删除会议。尝试一下,至少增加一次会议。

没有照片添加一些评论。目前手动设置日期;我们将填写createdAt在以后的步骤中自动列。

自定义easyadmin

默认的管理后端工作得很好,但是它可以通过许多方式进行定制来改善体验。让我们对Comment实体做一些简单的更改来演示一些可能性:

patch_file.
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
--- a / src / controller / admin / commendcrudcontroller.php+ + + b / src /控制器/ Admin / CommentCrudController.php@@ -3,7 +3,15 @@命名空间app \ controller \ admin;使用app \ entity \评论;+使用easycorp \ bundle \ easyadminbundle \ config \ crud;+使用包EasyCorp \ \ EasyAdminBundle \ Config \过滤器;使用easycorp \ bundle \ easyadminbundle \ controller \ abstractcrudcontroller;+使用easycorp \ bundle \ easyadminbundle \ field \ AssociationField;+使用EasyCorp \包\ EasyAdminBundle \ \ DateTimeField领域;+使用EasyCorp \包\ EasyAdminBundle \ \ EmailField领域;+使用easycorp \ bundle \ easyadminbundle \ field \ textareafield;+使用EasyCorp \ \ EasyAdminBundle \字段\ TextField捆绑销售;+使用EasyCorp \ Bundle \ Easyadminbundle \ Filter \ EntityFilter;class commateCrudController扩展了AbstractCrudController {@@ -12,14 +20,44 @@ class countedcrudcontroller扩展了抽象函数控制器评论::类;}- / *+公共功能configurud(crud $ crud):crud+ {+返回crud美元+  - > SetEntityLabelinsing('会议评论')+ - > setEntityLabelInPlural(会议评论)+ ->setSearchFields(['author', 'text', 'email'])+  - > setDefaultsort([rectionat'=>'desc']);++}++ public function configureFilters(Filters $ Filters):过滤器+ {+返回$筛选器+ - - - - - - >添加(EntityFilter::新(会议))++}+公共函数configurefields(String $ pagename):erabreation {——返回- IdField::新(id),-  TextField :: New('标题'),- TextEditorField::新(描述),-);+产量协会::新(''会议');+收益率TextField::新(“作者”);+收益率EmailField::新(电子邮件);+收益率TextareaField::新(文本)+  - > HIDEONINDEX()++收益率TextField::新(“photoFilename”)+  - > overhindex()+++ $ createD = datetimefield :: new('createat') - > setFormTypeOptions([+ 'html5' => true,+ '年份' => range(date('Y'), date('Y') + 5),+ 'widget' => 'single_text',+));+ if(crud :: page_edit === $ pagename){+ yield $createdAt->setFormTypeOption('禁用',true);+} else {+收益率createdAt美元;+}}- * /}

定制评论部分,明确列出字段configurefields()方法允许我们按想要的方式对它们排序。有些字段被进一步配置,比如隐藏索引页上的文本字段。

configurefilters()方法定义要在搜索字段顶部公开哪些过滤器。

这些自定义只是易于介绍EasyAdmin的可能性。

玩玩管理员,过滤评论会议,或搜索评论的电子邮件为例。唯一的问题是任何人都可以访问后端。别担心,我们会在未来的步骤中确保它。

1
$ ob娱乐下载symfony运行PSQL"截断会议重启身份级联"

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