轻松搭建网站管理后台

优质
小牛编辑
139浏览
2023-12-01

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“后就成功写到了数据库里啦

到此,我们已经实现了对数据库表的增删改查的管理功能