К примеру, у нас есть страничка main, на которой будут находится разные блоки (поиск, статьи, регистрация, etc). Разумеется, блоки будут повторяться в других контроллерах. Мне нужно как-то вынести формирование переменных/массивов передаваемых в шаблон для генерации этих блоков в отдельные контроллеры (или другие сущности, которых я не знаю). Что я пытался сделать:
Cоздаем MainController
<?php
// /src/AppBundle/Controller/MainController.php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
class MainController extends Controller {
/**
* @Route("/", name="main")
*/
public function mainAction () {
$filter_form = $this->forward( 'app.test:testAction' );
return new Response ( json_encode(Array( 'filter_form' => $filter_form )) );
}
}
Пытаемся вынести формирование строки в другой "сервис", под названием TestController.
# app/config/services.yml
services: app.test: class: AppBundle\Controller\TestController
Создаем контроллер TestController, который должен вернуть строку.
<?php
// /src/AppBundle/Controller/TestController.php
namespace AppBundle\Controller;
class TestController {
public function testAction () {
return 'STRING';
}
}
Но TestController возвращает Response объект, и в выводе мы видим:
{"filter_form":{"headers":{}}}
А нужно
{"filter_form":"STRING"}
Только начинаю разбираться с фреймворком. Подскажите, как сделать так, что бы контроллер возвращал то, что передается оператору return. Или как сделать правильно, что бы не дублировать код по контроллерам (то есть вынести логику из MainController)?