public function call(ExecutorInterface $executor): Response
{
return new Response($executor->exec());
}
можно также перед записью в БД сделать?
И нельзя ли где-то в одном месте это прописать, чтоб для всех методов работало?
$response = $this->json($data);
$response->setEncodingOptions(JsonResponse::DEFAULT_ENCODING_OPTIONS | JSON_UNESCAPED_UNICODE);
return $response;
$response = new JsonResponse($data);
$response->setEncodingOptions(JsonResponse::DEFAULT_ENCODING_OPTIONS | JSON_UNESCAPED_UNICODE);
return $response;
interface ComponentInterface
{
public function getName(): string;
public function getItems(): iterable;
}
class NewsComponent implements ComponentInterface
{
public function __construct(private NewsRepository $repository)
{
}
public function getName(): string
{
return 'news';
}
public function getItems(): iterable
{
return $this->repository->findAll();
}
}
class ArticleComponent implements ComponentInterface
{
public function __construct(private ArticleRepository $repository)
{
}
public function getName(): string
{
return 'article';
}
public function getItems(): iterable
{
return $this->repository->findAll();
}
}
interface ComponentFactoryInterface
{
public function create(): ComponentInterface;
}
class NewsComponentFactory implements ComponentFactoryInterface
{
public function __construct(private NewsRepository $repository)
{
}
public function create(): ComponentInterface
{
return new NewsComponent($this->repository);
}
}
class ArticleComponentFactory implements ComponentFactoryInterface
{
public function __construct(private ArticleRepository $repository)
{
}
public function create(): ComponentInterface
{
return new ArticleComponent($this->repository);
}
}
class ComponentFactory
{
/**
* @param array<string, ComponentFactoryInterface> $factories
*/
public function __construct(private array $factories)
{
}
public function create(string $name): ComponentInterface
{
return $this->factories[$name]->create();
}
}
$factory = new ComponentFactory([
'news' => new NewsComponentFactory(new NewsRepository($entityManager, News::class)),
'article' => new ArticleComponentFactory(new ArticleRepository($entityManager, Article::class)),
]);
var_dump($factory->create('news')->getName());
Зависимости - разве это плохо?
$product instanceof ConcreateProduct1
не доступны. Получается что-то типа фабрика + прокси.interface ComponentInterface
{
public function getName(): string;
}
class NewsComponent implements ComponentInterface
{
public function getName(): string
{
return 'news';
}
}
class ArticleComponent implements ComponentInterface
{
public function getName(): string
{
return 'article';
}
}
interface ComponentFactoryInterface
{
public function create(): ComponentInterface;
}
class NewsComponentFactory implements ComponentFactoryInterface
{
public function create(): ComponentInterface
{
return new NewsComponent();
}
}
class ArticleComponentFactory implements ComponentFactoryInterface
{
public function create(): ComponentInterface
{
return new ArticleComponent();
}
}
class ComponentFactory
{
/**
* @param array<string, ComponentFactoryInterface> $factories
*/
public function __construct(private array $factories)
{
}
public function create(string $name): ComponentInterface
{
return $this->factories[$name]->create();
}
}
$factory = new ComponentFactory([
'news' => new NewsComponentFactory(),
'article' => new ArticleComponentFactory(),
]);
var_dump($factory->create('news')->getName());