Aroused
@Aroused

Как вынести из контроллера часть логики?

К примеру, у нас есть страничка 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)?
  • Вопрос задан
  • 638 просмотров
Решения вопроса 1
artem90
@artem90
TeamLead, Developer
1. Создайте класс-сервис mySuperManager
2. Запихните в него всю логику
3. В контроллере попросите mySuperManager отдать нужные данные и передавайте их во вьюху или json или еще куда)

Пример контроллера:
381fa87cbe684439bbc2b811b7651e55.png

Пример метода класса mySuperService
2d25e524b37d4b57a962517dcbc41a0e.png

В моем случае mySuperManager возвращает сразу json, но в Вашей ситуации возвращайте то, что Вам нужно: объект, массив, строка и т.д.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
01 дек. 2024, в 00:04
30000 руб./за проект
30 нояб. 2024, в 22:41
500 руб./за проект