рдЧреИрд░-рдЗрдХрд╛рдИ рдкреГрд╖реНрда SonataAdminBundle рдореЗрдВ

SonataAdminBundle рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп ORM / ODM рдореЙрдбрд▓ рдХреЗ рд╕рдВрдкрд╛рджрди рд╕рдВрд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рдкреЗрдЬ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЗрдХрд╛рдИ рд╕реЗ рд╕рдВрдмрджреНрдз рдирд╣реАрдВ рд╣реИ, рддрд╛рдХрд┐ рдирдП рдкреЗрдЬ рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реЛрдирд╛рдЯрд╛рдбрд╛рдорд┐рдирдмрдВрдбрд▓ рдХреЗ рдкреЗрдЬ рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдлрд┐рдЯ рд╣реЛ рдЬрд╛рдП рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд░рдЦреЗрдВред

рдПрдХ рдЕрдиреБрднрд╡реА рд╕рд┐рдореНрдлрдиреА 2 рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдп рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдерд╛)ред

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ


рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ SonataAdminBundle рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ:


рдХреБрдЫ рдЗрд╕ рддрд░рд╣
/app/config/routing.yml
sonata_page_cache: resource: '@SonataCacheBundle/Resources/config/routing/cache.xml' prefix: / admin: resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml' prefix: /admin _sonata_admin: resource: . type: sonata_admin prefix: /admin 


рдЪрд░рдг 1. рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛


рд╣рдо рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ /src/Acme/DemoBundle/Controller/AdminController.php рдмрдирд╛рддреЗ рд╣реИрдВ , рдЬреЛ рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд░реНрдиреЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ:
 <?php namespace Acme\DemoBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Sonata\AdminBundle\Controller\CoreController; class AdminController extends CoreController { public function custompageAction(Request $request) { //      // ... return $this->render('AcmeDemoBundle:Admin:custompage.html.twig', array( 'base_template' => $this->getBaseTemplate(), 'admin_pool' => $this->container->get('sonata.admin.pool'), 'blocks' => $this->container->getParameter('sonata.admin.configuration.dashboard_blocks') )); } } 

рдХрд╕реНрдЯрдордкреЗрдЬрдПрдХреНрд╢рди рд╡рд┐рдзрд┐ рдПрдХ рдирдП рдкреГрд╖реНрда рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧреАред

рдЪрд░рдг 2. рдПрдХ рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝рдирд╛


рд╣рдорд╛рд░реЗ рдирдП рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ / рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / рдХрд╕реНрдЯрдордкреЗрдЬ рдкрд░, рдлрд╝рд╛рдЗрд▓ /app/config/rout.yml рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛:

 sonata_admin_custompage: pattern: /admin/custompage defaults: { _controller: AcmeDemoBundle:Admin:custompage } 

рд╕реНрдЯреЗрдк 3. рдкреЗрдЬ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдВ


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкреГрд╖реНрда рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрд╝рд╛рдЗрд▓ /src/Acme/DemoBundle/Resources/views/Admin/custompage.html.twig рдмрдирд╛рдПрдБ:
 {% extends 'SonataAdminBundle::standard_layout.html.twig' %} {% block breadcrumb %} <li><a href="{{ url('sonata_admin_dashboard') }}">{% trans %}Dashboard{% endtrans %}</a><span class="divider">/</span></li> <li class="active">Custom Page</li> {% endblock %} {% block content %} <h1>Custom Page</h1> Custom content {% endblock %} 

рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ, рд╣рдо рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ SonataAdminBundle рдХреЗ рдореБрдЦреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ :: standard_layout.html.twig ( /vendor/sonata-project/admin-bundle/Sonata/AdminBundle/Resources/views/standard_layout.html.twig ) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдлреЙрд░реНрдо рдмреНрд░реЗрдбрдХреНрд░рдВрдм (рдмреНрд░реЗрдбрдХреНрд░рдВрдм рдмреНрд▓реЙрдХ) ) рдФрд░ рдЬрдЧрд╣, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╛рдордЧреНрд░реА рдмреНрд▓реЙрдХ рдореЗрдВ рдирдП рдкреГрд╖реНрда рдХреА рд╕рд╛рдордЧреНрд░реАред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирдпрд╛ рдкреГрд╖реНрда / рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / рдХрд╕реНрдЯрдордкреЗрдЬ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ:


рдЪрд░рдг 4. рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛


рдЕрдм, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ / рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / рдбреИрд╢рдмреЛрд░реНрдб рдХреЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдПрдХ рд▓рд┐рдВрдХ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреИрд╢рдмреЛрд░реНрдб.html.twig рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдореБрдЦреНрдп рдкреЗрдЬ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SonataAdminBundle рдореЗрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ /app/Resources/SonataAdminBundle/views/Core/dashboard.html.twig рдмрдирд╛рдПрдВ :

 {% extends base_template %} {% block title %}{{ 'title_dashboard'|trans({}, 'SonataAdminBundle') }}{% endblock%} {% block breadcrumb %}{% endblock %} {% block content %} <div class="row-fluid"> <div class="span6"> <a href="{{ url('sonata_admin_custompage') }}" class="btn">Custom Page</a> </div> </div> <br/> <div class="row-fluid"> <div class="span6"> {% for block in blocks %} {% if block.position == 'left' %} {{ sonata_block_render({ 'type': block.type, 'settings': block.settings}) }} {% endif %} {% endfor %} </div> <div class="span6"> {% for block in blocks %} {% if block.position == 'right' %} {{ sonata_block_render({ 'type': block.type, 'settings': block.settings}) }} {% endif %} {% endfor %} </div> </div> {% endblock %} 

рдЕрдЧрд▓рд╛ рдХрджрдо рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рд╣реИ (рднрд▓реЗ рд╣реА рдЖрдк рджреЗрд╡ рдорд╛рд╣реМрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реЛрдВ):
 php app/console cache:clear --env=dev --no-debug 

рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореБрдЦреНрдп рдкреГрд╖реНрда / рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ / рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдПрдХ рдмрдЯрди рд▓рд┐рдВрдХ рд╣реИ:


рдирд┐рд╖реНрдХрд░реНрд╖


рдпрд╣ рд╕рдорд╕реНрдпрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╢рд╛рдпрдж рдЖрдк рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рд╖рдп рдкрд░ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдк рдпрд╣рд╛рдВ рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рдкреГрд╖реНрда рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In167543/


All Articles