jobeet第十二天:后台管理工具包-Sonata Admin

*这一系列文章来源于Fabien Potencier,基于Symfony1.4编写的Jobeet Tutirual

在第十一天中,我们给Jobeet添加了一些测试,这个应用程序已经完全能够被求职者(seekers)和职位发布者(posters)使用了。现在是时候考虑我们应用程序的admin部分了。今天还好有Sonata Admin Bundle的帮助,我们会使用它开发出一个完整Jobeet后台管理接口,(这个过程)用不到一个小时。

安装Sonata Admin Bundle

下载SonataAdminBundle和它的依赖到vendor目录下:

为了安装最新版本的SonataAdminBundle和依赖,这个使用*作为输入。

我们同样需要安装SonataDoctrineORMADminBundle

现在我们需要声明新的bundle和依赖,修改AppKernel.php文件,添加下面代码到文件中:

修改config.yml,把下面代码添加到文件末尾:

config.yml中找到translator键。如果它被注释掉了,那么请不要注释它。

为了能让应用程序跑起来,我们需要导入(import)admin routes

现在我们从bundle中安装资源:

别忘记把cache清除掉:

现在我们应该可以通过URL:http://jobeet.local/app_dev.php/admin/dashboard访问放到admin面板了。

以上的安装需要一步步进行,不然的话可能会报一些Bundle未找到的异常,还有就是目录必须是可写的。可能是SonataAdminBundle更新后的原因,如果在安装过程中遇到需要CoreBundle的问题,那么试着按照提示进行操作,但问题都不大。这里附上一个解决问题的链接:https://github.com/sonata-project/SonataAdminBundle/issues/1832

CRUD控制器

CRUD控制器包含了基础的CRUD操作。它是通过控制器名称映射到一个正确的Admin类的一个实例。我们可以按照项目的需求来重写任何或者所有的action。控制器使用Admin类来构造不同的操作。在控制器中可以通过configuration属性来访问Admin对象。

现在我们来为每个实体都创建一个控制器。首先是Category实体:

然后是Job实体:

 

创建Admin

Admin类代表的是模型的映射和管理页面(表单,列表,页面显示(show))的部分。为模型创建Admin类的最简单方式是去继承Sonata\AdminBundle\Admin\Admin类。我们会在Admin文件夹中创建Admin类。我们先创建Admin目录,然后为Category创建Admin类:

 

现在我们需要把每个admin类添加到services.yml配置文件中:

现在我们可以在管理面板页看到Jobeet分组了,还有JobCategory模块(modules),它们都有各自的Add newList链接。

12-01

配置Admin

如果我们去点击Add new或者List链接,我们什么都看不到。那是因为我们还没有为listform配置字段。我们来做个基础的配置,先从Category开始:

现在是Job

对于show操作,我们使用自定义的模板来显示公司的logo属性:

通过上面的操作,我们为JobCategory创建了基础的管理模块。我们可以发现它们有以下功能:

  • 列表分页显示
  • 列表可以排序
  • 列表可以过滤
  • 可以创建,编辑,删除对象
  • 可以批量选择对象并进行删除
  • 拥有表单验证
  • 快速反馈给用户的flash信息提示

批量操作(Batch Actions)

批量操作是对一个被选择的模型对象集合(所有的对象或者只是它们中的一个子集)进行的操作。我们能够方便地为列表页面添加自定义的批量操作。delete操作默认就允许我们一次删除多个实体。

为了添加新的批量操作,我们需要重写Admin类的getBatchActions()方法。我们来添加一个批量处理extend的操作:

extend批量操作的核心逻辑在JobAdminController::batchActionExtend()方法中。batchActionExtend()方法有一个查询参数,通过这个查询参数我们可以检索出被选择的模型对象。如果出于某种原因,你可能不需要通过默认的选择方法(selection method)来进行批量操作(例如,你可以选择在模板级别上进行细粒度的模型选择),那么可以传递一个值为null的查询参数。

我们再来添加一个批量删除所有在60天内仍未被激活的Job数据的操作。对于这个操作,我们不需要在列表中选择任何的Job数据,因为在这个操作的逻辑中会去检索符合条件的记录并删除它们。

除了创建batchActionDeleteNeverActivated操作外,我们还会创建一个JobAdminController:: batchActionDeleteNeverActivatedIsRelevant()方法,这个方法需要得到确认之后才能够执行,以确保用户真的是要进行这个操作(在我们的这个例子中它总是返回true,因为选择需要被删除的Job数据的逻辑在JobRepository::cleanup()方法中)。

今天我们就先到这了!明天我们来看看怎么样为管理员部分添加用户名(username)和密码(password),同时也会讨论Symfony的安全机制。

 

原文链接:http://www.intelligentbee.com/blog/2013/08/18/symfony2-jobeet-day-12-sonata-admin-bundle/

发表评论