[SonataAdminBundle] git=http://github.com/sonata-project/SonataAdminBundle.git target=/bundles/Sonata/AdminBundle [SonataDoctrineORMAdminBundle] git=http://github.com/sonata-project/SonataDoctrineORMAdminBundle.git target=/bundles/Sonata/DoctrineORMAdminBundle [SonatajQueryBundle] git=http://github.com/sonata-project/SonatajQueryBundle.git target=/bundles/Sonata/jQueryBundle [KnpMenuBundle] git=https://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
<?php // app/autoload.php $loader->registerNamespaces(array( // ... 'Sonata' => __DIR__.'/../vendor/bundles', 'Knp\Bundle' => __DIR__.'/../vendor/bundles', 'Knp\Menu' => __DIR__.'/../vendor/knp/menu/src', // ... )); // app/AppKernel.php public function registerBundles() { return array( // ... new Sonata\AdminBundle\SonataAdminBundle(), new Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle(), new Knp\Bundle\MenuBundle\KnpMenuBundle(), new Sonata\jQueryBundle\SonatajQueryBundle(), // ... ); }
# app/config/routing.yml admin: resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml' prefix: /admin _sonata_admin: resource: . type: sonata_admin prefix: /admin
php app/console assets:install web
sonata_admin: title: .
framework: translator: { fallback: %locale% }
<?php namespace Test\NewsBundle\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 Knp\Menu\ItemInterface as MenuItemInterface; class NewsAdmin extends Admin { /** * * * @param \Sonata\AdminBundle\Show\ShowMapper $showMapper * @return void */ protected function configureShowField(ShowMapper $showMapper) { $showMapper ->add('id', null, array('label' => '')) ->add('title', null, array('label' => '')) ->add('announce', null, array('label' => '')) ->add('text', null, array('label' => '')) ->add('pubDate', null, array('label' => ' ')) ->add('newsLinks', null, array('label' => ' ')) ->add('newsCategory', null, array('label' => '')); } /** * * @param \Sonata\AdminBundle\Form\FormMapper $formMapper * @return void */ protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('title', null, array('label' => '')) ->add('announce', null, array('label' => '')) ->add('text', null, array('label' => '')) ->add('pubDate', null, array('label' => ' ')) //by_reference // Symfony Form Framework, setter News::setNewsLinks ->add('newsLinks', 'sonata_type_collection', array('label' => '', 'by_reference' => false), array( 'edit' => 'inline', // NewsLink pos, // sortable 'sortable' => 'pos', 'inline' => 'table', )) ->add('newsCategory', null, array('label' => '')) ->setHelps(array( 'title' => ' ', 'pubDate' => ' ' )); } /** * * * @param \Sonata\AdminBundle\Datagrid\ListMapper $listMapper * @return void */ protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('id') ->addIdentifier('title', null, array('label' => '')) ->add('pubDate', null, array('label' => ' ')) ->add('newsCategory', null, array('label' => '')); } /** * , * * @param \Sonata\AdminBundle\Datagrid\DatagridMapper $datagridMapper * @return void */ protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('title', null, array('label' => '')); } /** * * * @param \Knp\Menu\ItemInterface $menu * @param $action * @param null|\Sonata\AdminBundle\Admin\Admin $childAdmin * * @return void */ protected function configureSideMenu(MenuItemInterface $menu, $action, Admin $childAdmin = null) { $menu->addChild( $action == 'edit' ? ' ' : ' ', array('uri' => $this->generateUrl( $action == 'edit' ? 'show' : 'edit', array('id' => $this->getRequest()->get('id')))) ); } }
<?php namespace Test\NewsBundle\Admin; use Sonata\AdminBundle\Admin\Admin; use Sonata\AdminBundle\Form\FormMapper; class NewsLinkAdmin extends Admin { /** * @param \Sonata\AdminBundle\Form\FormMapper $formMapper * @return void */ protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add('url', null, array('label' => 'URL', 'required' => true)) ->add('text', null, array('label' => '')); } }
<?xml version="1.0" ?> <container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> <services> <service id="test.news.admin.news" class="Test\NewsBundle\Admin\NewsAdmin"> <tag name="sonata.admin" manager_type="orm" group="" label=""/> <argument/> <argument>Test\NewsBundle\Entity\News</argument> <argument>SonataAdminBundle:CRUD</argument> </service> <service id="test.news.admin.newsLink" class="Test\NewsBundle\Admin\NewsLinkAdmin"> <tag name="sonata.admin" manager_type="orm" show_in_dashboard="false" /> <argument/> <argument>Test\NewsBundle\Entity\NewsLink</argument> <argument>SonataAdminBundle:CRUD</argument> </service> <service id="test.news.admin.newsCategory" class="Test\NewsBundle\Admin\NewsCategoryAdmin"> <tag name="sonata.admin" manager_type="orm" group="" label=" "/> <argument/> <argument>Test\NewsBundle\Entity\NewsCategory</argument> <argument>SonataAdminBundle:CRUD</argument> </service> </services> </container>
#src/Test/NewsBundle/Admin/NewsAdmin.php class NewsAdmin { .. /** * * @param $news * @return void */ public function preUpdate($news) { // $emptyObj = $this->getNewInstance(); // , onfigureFormFields NewsAdmin, // // - , // NewsLink , html- //( NewsLink) // NewsLink - , Doctrine $this->getForm()->setData($emptyObj)->bindRequest($this->getRequest()); $newLinkPos = array(); // NewsLink foreach ($emptyObj->getNewsLinks() as $link) $newLinkPos[] = $link->getUrl(); $newLinkPos = array_flip($newLinkPos); // foreach ($news->getNewsLinks() as $pos => $link) $link->setPos($newLinkPos[$link->getUrl()]); } .. }
<?xml version="1.0"?> <xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2"> <file source-language="ru" datatype="plaintext" original="" > <body> <trans-unit id="News List"> <source>News List</soure> <target> </target> </trans-unit> <trans-unit id="News Create"> <source>News Create</soure> <target> </target> </trans-unit> <trans-unit id="News Edit"> <source>News Edit</soure> <target> </target> </trans-unit> <trans-unit id="News Category List"> <source>News Category List< soure> <target> </target> </trans-unit> <trans-unit id="News Category Create"> <source>News Category Create</soure> <target> </target> </trans-unit> <trans-unit id="News Category Edit"> <source>News Category Edit</soure> <target> </target> </trans-unit> </body> </file> </xliff>
Source: https://habr.com/ru/post/136659/
All Articles