Как ваша логика возвращает ответ, наиболее приспособленный контекст является контроллером ,
Кроме того, если ваша логика вызывается из нескольких контекстов или нескольких классов одного и того же контекста (например, контроллеры), чтобы избежать дублированного кода, у вас есть две возможности (по крайней мере):
1 - Используйте AbstractController и сделать ваши контроллеры расширением абстрактного.
2- Использовать сервис (то есть CsvManager).
Если вы хотите, чтобы некоторые примеры реализации, см. Symfony2 reusable functions in controllers и глава Controller as a service в документации Symfony.
Пример реализации услуг:
// src/AppBundle/Services/CsvManager.php
class CsvManager
{
public function generate(/** params */)
{
// Return your streamed response
}
}
Декларация службы:
// app/config/services.yml
services:
# ...
app.csv_manager:
class: AppBundle\Services\CsvManager
Теперь вы можете использовать сервис от всех контроллеров и других контекстов, которые реализуют контейнер услуг. пример:
// src/AppBundle/Controller/TestController.php;
class TestController extends \Symfony\Bundle\FrameworkBundle\Controller\Controller
{
public function printCsvAction()
{
$csvManager = $this->get('app.csv_manager');
return $csvManager->generate(/** params */);
}
}
Если вам нужны примеры, скажите мне. – chalasr
@chalasr please: D –
У вас его :) См. Мой ответ – chalasr