SharEDITor

教你成为全栈工程师(Full Stack Developer) 十一-轻松搭建网站管理后台

全栈技术 教你成为全栈工程师(Full Stack Developer) 发表于 2016-04-25 16:12:46 阅读1729次


互联网上见到的多数网站都有一个你看不见的更强大的管理后台支持,比如一个新闻网站的管理后台一定有新闻编辑、发布、审核、管理等,一个论坛网站的管理后台一定有用户管理、板块管理、帖子审核等。这一节我们见识一下php框架的真正魅力:数行代码实现的强大管理后台

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

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/*),效果如下:

 

请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址

 

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

 

 

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