10分ぐらいで学べるSymfony2 〜admin generator編〜
informationテーブルに対してアドミンジェネレータでCRUD処理を作成するメモ
SonataAdminBundleを利用します。今回はエンティティは「src/Root/SiteBundle/Entity/Information.php」に作成済とします
(1)インストール
vendor下にインストールするが結構な数のバンドルのインストールが必要
$ vi deps [SonatajQueryBundle] git=http://github.com/sonata-project/SonatajQueryBundle.git target=/bundles/Sonata/jQueryBundle [SonataBluePrintBundle] git=http://github.com/sonata-project/SonataBluePrintBundle.git target=/bundles/Sonata/BluePrintBundle [SonataUserBundle] git=http://github.com/sonata-project/SonataUserBundle.git target=/bundles/Sonata/UserBundle [SonataAdminBundle] git=http://github.com/sonata-project/SonataAdminBundle.git target=/bundles/Sonata/AdminBundle [MenuBundle] git=http://github.com/knplabs/KnpMenuBundle.git target=/bundles/Knp/Bundle/MenuBundle [KnpMenu] git=https://github.com/knplabs/KnpMenu.git target=/knp/menu # インストール $ php bin/vendors install # autoload設定追記 <?php # app/autoload.php $loader->registerNamespaces(array( // ... 'Sonata' => __DIR__.'/../vendor/bundles', 'Knp' => array( __DIR__.'/../vendor/bundles', __DIR__.'/../vendor/knp/menu/src', ), // ... )); # app/AppKernel.php public function registerBundles() { return array( // ... new Sonata\jQueryBundle\SonatajQueryBundle(), new Sonata\BluePrintBundle\SonataBluePrintBundle(), new Sonata\AdminBundle\SonataAdminBundle(), new Knp\Bundle\MenuBundle\KnpMenuBundle(), // ... ); } # ルーティングの設定 $ vi app/config/routing.yml sonata_admin: resource: "@SonataAdminBundle/Resources/config/routing/sonata_admin.xml" prefix: /admin _sonata_admin: resource: . type: sonata_admin prefix: /admin # assetのインストール $ php app/console assets:install web --symlink
これで「http://xxxxxxxxxx/admin/dashboard」にアクセスすると↓のような空のダッシュボードが表示されます。
(2)Adminクラスの作成
SonataAdminBundleでは項目毎にAdminクラスを生成して、そこにCRUDの定義などをがりがり書いていくようです。(「generator.yml」的な感じですね)
# src/Root/SiteBundle/Admin/InformationAdmin.php <?php namespace Root\SiteBundle\Admin; use Sonata\AdminBundle\Admin\Admin; use Sonata\AdminBundle\Form\FormMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Show\ShowMapper; use Sonata\AdminBundle\Validator\ErrorElement; class InformationAdmin extends Admin { protected function configureDatagridFilters(DatagridMapper $datagrid) { $datagrid ->add('title') ; } protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('id') ->add('title') ->add('start_date') // add custom action links ->add('_action', 'actions', array( 'actions' => array( 'view' => array(), 'edit' => array(), ) )) ; } protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('title') ->add('body') ; } public function validate(ErrorElement $errorElement, $object) { $errorElement ->with('title') ->assertMaxLength(array('limit' => 32)) ->end() ; } }
(3)Controllerクラスの作成
Controllerクラスは空で良いです。ルーティングも基本的なアクションは設定しなくても
よろしくやってくれるようです。
# src/Root/SiteBundle/Controller/InformationAdminController.php <?php namespace Root\SiteBundle\Controller; use Sonata\AdminBundle\Controller\CRUDController as Controller; class InformationAdminController extends Controller { }
(4)config.ymlの設定
最後にサービス的な物を登録します。
# app/config/config.yml services: root.site.admin.information: class: Root\SiteBundle\Admin\InformationAdmin tags: - { name: sonata.admin, manager_type: orm, group: site_management, label: information } arguments: [null, Root\SiteBundle\Entity\Information, RootSiteBundle:InformationAdmin]
登録後にキャッシュをクリアすると・・・
わりといけてる感じの管理画面ができました
参考
SensioGeneratorBundle
http://symfony2bundles.org/sensio/SensioGeneratorBundle
SonataAdminBundle
http://symfony2bundles.org/sonata-project/SonataAdminBundle
SonataAdminBundle documentation
http://sonata-project.org/bundles/admin/master/doc/index.html