Create, read, update and delete is something you need to manage in any Project.
UPDATE: I took the decision of taking down the sonata example, since I consider now a much better way to do this with Symfony directly without using Sonata at all. To see an example of a custom admin in action please refer to https://github.com/martinberlin/supercomprador that is the admin backend for my project supercomprador.es
Here is simple formula that works using this simplified version of Sonata Admin and here is the list of steps to achieve a new Crud list per entity:
- Design your table structure or pick an existing one
- Use Doctrine to create your Entity Classes from the Tables
- Add an admin service in Sonata to bring up the Crud functionality
Expanding the points above:
#2 Converting existing mySql tables in Doctrine Entities
After adding your mySql database credentials to app/config.yml, having existing table structures / data, run the following command in the project root:
php app/console doctrine:mapping:import –force yourSymfonyBundle xml
This will generate ORM mapping schema information as xml in the directory Resources/config/doctrine that will be used with the next command to generate the Doctrine entities in the Synfony Entity folder.
This is to create the Tables when you have the entities written:
php app/console doctrine:schema:create
For more information read the documentation regarding Symfony and Doctrine
#3 Adding the Entities in Sonata to enable the Crud functionality
<?php namespace BaseAdmin\BaseAdminBundle\Admin; use Sonata\AdminBundle\Admin\Admin; use Sonata\AdminBundle\Datagrid\ListMapper; use Sonata\AdminBundle\Datagrid\DatagridMapper; use Sonata\AdminBundle\Form\FormMapper; class CityAdmin extends Admin { // Fields to be shown on create/edit forms protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('city', 'text', array('label' => 'City')) ->add('fmuser') ->add('name') //if no type is specified, SonataAdminBundle tries to guess it ; } // Fields to be shown on Filter forms (right) protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('city') ->add('fmuser') ; } // Fields to be shown on Datagrid lists protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('city') ->add('name') ->add('fmuser') ; } }
The code to achieve this is Open source and the repository is located here: