轻松搭建网站管理后台
sonata介绍
sonata扩展是symfony2众多扩展中应用最广泛的扩展之一,它的主要功能是帮你建立一个强大的管理后台,除此之外还有很多附加功能你可以深入挖掘,官方文档在https://sonata-project.org/bundles/admin/2-3/doc/index.html
composer扩展管理工具
为了安装symfony2的扩展,我们需要一个composer工具,它的安装方法(参考https://getcomposer.org/download/,以下命令如若失效,请以官方最新文档为准)为连续执行以下命令:
[root@centos7vm ~]# php -r "readfile('https://getcomposer.org/installer');" > composer-setup.php
[root@centos7vm ~]# php -r "if (hash_file('SHA384', 'composer-setup.php') === '7228c001f88bee97506740ef0888240bd8a760b046ee16db8f4095c0d8d525f2367663f22a46b48d072c816e7fe19959') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
[root@centos7vm ~]# php composer-setup.php
[root@centos7vm ~]# php -r "unlink('composer-setup.php');"
然后你会发现当前目录下有一个composer.phar文件,我们把它移动到/usr/local/bin下并重命名:
[root@centos7vm ~]# mv composer.phar /usr/local/bin/composer
ok,安装完成,执行
[root@centos7vm ~]# composer
看下是否输出帮助信息
安装sonata-admin
先看一下工程目录下的composer.json这个文件,这里面记录了当前工程都依赖哪些扩展包及其版本信息,这个文件一般我们不去编辑,当用composer更新扩展包时会自动更新这个文件
执行:
[root@centos7vm mywebsite]# composer require sonata-project/admin-bundle "2.3.*"
安装sonata的admin-bundle,因为admin-bundle会依赖一些其他bundle,所以安装过程可能会比较慢,需要耐心等待,当输出有:
[OK] All assets were successfully installed.
说明安装完成
为了让admin-bundle能操作我们的数据库,还需要安装doctrine-orm-admin-bundle,执行:
[root@centos7vm mywebsite]# composer require sonata-project/doctrine-orm-admin-bundle "2.3.*"
安装了sonata扩展,相当于往vendor目录里拷贝了一批文件,但实际上我们还没有真正使用上,如果要使用起来,需要修改app/AppKernel.php把要使用的组件注册进来才能生效(所有的symfony2组件的安装都需要这个过程),修改app/AppKernel.php中的registerBundles()函数,在$bundles = array(...最后添加:
new Sonata\CoreBundle\SonataCoreBundle(),
new Sonata\BlockBundle\SonataBlockBundle(),
new Knp\Bundle\MenuBundle\KnpMenuBundle(),
new Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle(),
new Sonata\AdminBundle\SonataAdminBundle(),
注:如果某个bundle已经注册过,则不需要重复注册
配置sonata-admin
sonata-admin的接口都是基于SonataBlockBundle,按block组织在一起的,所以必须先告诉blockbundle,sonata-admin这个block的存在,所以修改app/config/config.yml
添加如下配置(注意缩进):
sonata_block:
default_contexts: [cms]
blocks:
# enable the SonataAdminBundle block
sonata.admin.block.admin_list:
contexts: [admin]
block配置完还需要给admin-bundle指定路由,这样才能通过url访问,admin-bundle是有自己的一套路由配置的,我们只需要加载进来即可,修改app/config/routing.yml,添加如下内容:
admin_area:
resource: "@SonataAdminBundle/Resources/config/routing/sonata_admin.xml"
prefix: /admin
OK,清缓存:
[root@centos7vm mywebsite]# php app/console cache:clear
[root@centos7vm mywebsite]# php app/console assets:install
访问http://172.16.142.130/app_dev.php/admin看看(这里的172.16.142.130是我的虚拟机ip,需要换成你的ip,另外如果访问不了可以尝试手工清缓存rm -rf app/cache/*),效果如下:
创建BlogPost的后台管理
创建src/AppBundle/Admin/BlogPostAdmin.php文件,内容如下:
<?php
namespace AppBundle\Admin;
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
class BlogPostAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('title', 'text')
->add('body', 'text')
->add('create_time', 'datetime');
}
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('title')
->add('createTime')
;
}
}
创建了BlogPostAdmin还不能让symfony2知道,所以还需要注册一下,修改app/config/services.yml,在services组中添加服务:
admin.blog_post:
class: AppBundle\Admin\BlogPostAdmin
arguments: [~, AppBundle\Entity\BlogPost, ~]
tags:
- { name: sonata.admin, manager_type: orm, label: Blog post }
这样还不够,还需要配置好有关自定义Admin类的路由,修改app/config/routing.yml,添加:
_sonata_admin:
resource: .
type: sonata_admin
prefix: /admin
OK,重新打开http://172.16.142.130/app_dev.php/admin看到如下:
点开"link_list"看到了什么?
(*@ο@*) 哇~,是我们手工在数据库里添加进去的那一行哎!
点击“link_add"进去添加一条记录试试,我们添加如下一行:
点击”btn_create_adn_return_to_list“后就成功写到了数据库里啦
到此,我们已经实现了对数据库表的增删改查的管理功能