Опубликовано ср, 07/02/2014 - 14:43 пользователем DepX
На каждом сайте существует множество блоков (меню, погода, новости...), чтобы не использовать SonataBlockBundle, не подключать контроллеры в каждом шаблоне - создаем ядро контроллеров
Создадим бандл AcmeDemoBundle, теперь добавим ядро контроллеров (Acme/DemoBundle/Controller/CoreController.php)
namespace Acme\DemoBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class CoreController extends Controller { // параметры шаблона public function param() { return array( 'main_menu' => // подключаем контроллер или сервис главного меню 'sub_menu' => // ... 'base_template' => $this->getBaseTemplate() // базовый шаблон бандла/сайта ); } // генерируем новый шаблон с параметрами public function template($template, $params = array()) { return $this->render($template, array_merge( $this->param(), $params ) ); } // указываем базовый шаблон public function getBaseTemplate() { return 'AcmeDemoBundle::layout.html.twig'; } }
создадим и добавим в шаблон AcmeDemoBundle::layout.html.twig теги
<div id="main-menu">{{ main_menu }}</div> <div id="sub-menu">{{ sub_menu }}</div> <div id="body">{% block body %}{% endblock %}</div>
создадим и добавим в шаблон для вывода основной информации AcmeDemoBundle:Main:index.html.twig главной страницы
{% extends base_template %} {% block body %} Содержимое главной страницы {{ test_tag }} {% endblock %}
создаем контроллер главной страницы
namespace Acme\DemoBundle\Controller; use Acme\DemoBundle\Controller\CoreController; class AdminController extends CoreController { public function indexAction() { return $this->template('AcmeDemoBundle:Main:index.html.twig', array( // можем добавить свои теги 'test_tag' => 'Test tag' //или изменить существующие //'main_menu' => ... //'base_template' => ... )); // либо используем стандартной функцией с нашими параметрами $this->params // return $this->render('AcmeDemoBundle:Main:main.html.twig', $this->params); } }