У меня проблема с правильным расположением сервисов. Я хочу создать генератор, который благодаря провайдеру будет создавать соответствующий объект-генератор через фабричный метод. На мой взгляд, это выглядело бы примерно так:
Запрос API с поставщиком -> GeneratorController::generate -> фабричный метод -> служба классов генератора
Я хотел бы сгенерировать файл PDF, используя веточка, но у меня проблема с ContainerInterface. Боюсь, моя концепция работы не верна. Кто-нибудь может сказать мне, иду ли я в правильном направлении?
Я хотел бы создать генератор PDF-файлов, который создается с помощью классов поставщика и генератора.
Контроллер-генератор
public function generate($provider, Request $request): Response
{
$generator = $this->factory->createGenerator($provider);
$content = json_decode($request->getContent(), true);
$generator->generate($content['params']);
return new JsonResponse($generator->getData());
}
GeneratorFactory
class GeneratorFactory
{
public function createGenerator($generator): Generator
{
$generatorName = "App\\Generators\\" . ucwords($generator) . "\\Generator";
if (!class_exists($generatorName)) {
throw new \Exception("We dont find genarator with name: " . $generator);
}
return new $generatorName;
}
}
Генератор с завода
public function __construct()
{
$this->object = new GeneratorObject;
$this->validator = new Validator;
$this->service = new PdfService();
}
public function generate(array $params): void
{
$valided = $this->validator->Validate($params);
if (!$valided) {
throw new Exception("Invalid parameters", 1);
}
$this->setDataToObject($params);
$pdf = $this->service->createPdf($this->object);
$this->data = $pdf;
}
Сервис для pdf
public function createPdf(GeneratorObject $pdfObject): string
{
$url = '';
$html = $this->templating->render('pdf/index.html.twig',[$pdfObject]);
return $url;
}
Подробнее здесь: https://stackoverflow.com/questions/758 ... ory-method
Генератор заводским методом ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение