按照安装说明操作,SonataAdminBundle已经安装,但还是无法访问。你要深入配置他,才可以使用它。这里会快速的配置SonataAdminBundle并创建一个管理界面,需要一下几步
第一步,定义SonataAdminBundle路由:
第二步,创建一个Admin类
第三步,创建一个Admin服务
第四步,配置
2入门SonataAdminBundle
2.1第一步,定义SonataAdminBundle路由
为了能够访问SonataAdminBundle界面,你需要将其路由添加到应用程序的路由文件:
1 2 3 4 5 6 7 8 9 |
# app/config/routing.yml admin: resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml' prefix: /admin _sonata_admin: resource: . type: sonata_admin prefix: /admin |
注意:这个resource: .是个什么奇怪的语法?因为symfony必须要定义一个资源(指向一个真实的文件)。一旦验证通过Sonata’s AdminPoolLoader,他会处理这条路由,会忽略资源设置。
此时你可以访问管理界面了:http://yoursite.local/admin/dashboard.
2.2第二步,创建一个Admin类
SonataAdminBundle可以帮助你使用图形界面来管理你的数据,你可以创建、更新和查询你的模型。这些操作都需要配置,使用Admin类来完成。
这个Admin类相当于把每一个管理操作都映射到你的模型。在这里,你决定哪些字段显示在列表,使用过滤器或者决定什么字段显示在创建和编辑表单。
为你的模型创建一个Admin类最简单的方法就是继承Sonata\AdminBundle\Admin\Admin类
假设你的AcmeDemoBundle有一个Post实体。
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 |
<?php // src/Acme/DemoBundle/Admin/PostAdmin.php namespace Acme\DemoBundle\Admin; use Sonata\AdminBundle\Admin\Admin; use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Form\FormMapper; class PostAdmin extends Admin { // Fields to be shown on create/edit forms protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('title', 'text', array('label' => 'Post Title')) ->add('author', 'entity', array('class' => 'Acme\DemoBundle\Entity\User')) ->add('body') //if no type is specified, SonataAdminBundle tries to guess it ; } // Fields to be shown on filter forms protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('title') ->add('author') ; } // Fields to be shown on lists protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('title') ->add('slug') ->add('author') ; } } |
2.3第三步,创建一个Admin服务
现在,你已经有了一个Admin 类,你需要为他创建服务。该服务需要有sonata.admin tag,让SonataAdminBundle知道这个特殊的服务代表一个Admin类
创建一个新的admin.yml文件在Acme/DemoBundle/Resources/config/目录下:
1 2 3 4 5 6 7 8 9 10 11 12 |
# Acme/DemoBundle/Resources/config/admin.yml services: sonata.admin.post: class: Acme\DemoBundle\Admin\PostAdmin tags: - { name: sonata.admin, manager_type: orm, group: "Content", label: "Post" } arguments: - ~ - Acme\DemoBundle\Entity\Post - ~ calls: - [ setTranslationDomain, [AcmeDemoBundle]] |
上面的例子假设你用SonataDoctrineORMAdminBundle。如果你使用SonataDoctrineMongoDBAdminBundle、SonataPropelAdminBundle或者SonataDoctrinePhpcrAdminBundle你的manager_type选项就应该调整为doctrine_mongodb,propel和doctrine_phpcr。
一个Admin服务基本配置相当的简单。它创建一个服务实例,基于你之前指定的类,并接受三个参数:
1.Admin服务代码(默认为服务名称)
2.Admin类映射的模型(必须)
3.控制器处理管理操作(默认为SonataAdminBundle:CRUDController())
通常你只需指定第二个参数,第一个参数和第二个参数的默认值适用于大多数情况。
setTranslationDomain的调用,让你选择管理页面的翻译域。更多信息查看symfony的翻译。
现在,你有你的admin服务配置文件,你需要告诉symfony加载它。有两种方法来完成它
2.3.1. 1-导入到主要config.yml
把你新配置的文件引入到主要配置config.yml(请确保你使用正确的文件扩展名)
1 2 3 |
# app/config/config.yml imports: - { resource: @AcmeDemoBundle/Resources/config/admin.yml } |
2.3.1.2-让你的bundle加载它
你也可以在你自己的bundle中加载Admin配置文件。在你自己的bundle扩展文件中load方法中使用load()来加载配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Acme/DemoBundle/DependencyInjection/AcmeDemoBundleExtension.php for YAML configurations namespace Acme\DemoBundle\DependencyInjection; use Symfony\Component\DependencyInjection\Loader; use Symfony\Component\Config\FileLocator; class AcmeDemoBundleExtension extends Extension { public function load(array $configs, ContainerBuilder $container) { // ... $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('admin.yml'); } } |
2.4 第四步,配置
这时,你已经有一个基本的管理页面,来操作你的Model。如果你访问http://yoursite.local/admin/dashboard,你会看到一个面板。你可以创造、展示列表、编辑和删除。
你可能想把自己的项目名称和logo放到顶部栏。
把你的logo文件放到src/Acme/DemoBundle/Resources/public/img/fancy_acme_logo.png里
安装你的资源
1 |
$ php app/console assets:install |
现在你需要改变你项目的主配置文件config.yml
1 2 3 4 |
# app/config/config.yml sonata_admin: title: Acme Demo Bundle title_logo: bundles/acmedemo/img/fancy_acme_logo.png |
2.5下一步,安全
你可能已经注意到,你能够输入url来访问你的仪表盘和数据。默认情况下,SonataAdminBundle不附带任何用户管理,增加了极大的灵活性。然而, 这个功能是你应用程序最有可能需要的。Sonata项目包含了SonataUserBundle它集成了非常流行的FOSUserBundle。
恭喜!你已经准备好开始使用SonataAdminBundle了。现在你可以映射其他模型或探索更先进的功能。下面更深层次的讲解每个部分和SonataAdminBundle可以配置什么和能够实现什么