Я создаю свой собственный Normalizer
на основе учебника на странице документации Symfony
https://symfony.com/doc/current/serializer/custom_normalizer.html,, который я нахожу неполным, потому что он говорит вам, как его создать, но не применять, это первое точка.
Затем, основываясь на моем небольшом опыте в Symfony
, я пытаюсь угадать, как передать данные в normalizer
, чтобы быть правильными вычислениями, данные, которые я пытаюсь передать, не services
, что может быть String or a Request object
, но ни одна из этих данных не позволяет мне, на самом деле мне нужно понять или мне нужно провести рефакторинг, чтобы получить то, что я хочу?
Я поместил свой код normalizer
, чтобы хорошо понять, что я ищу.
ЭН:
<?php
namespace App\Serializer;
use App\Entity\Task;
use App\Traits\TaskControl;
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
class TaskNormalizer implements NormalizerInterface
{
use TaskControl;
private $normalizer;
private $rangeDate;
public function __construct(ObjectNormalizer $normalizer, $rangeDate )
{
$this->normalizer = $normalizer;
$this->rangeDate = $rangeDate;
}
public function normalize($task, $format = null, array $context = [])
{
$data = $this->normalizer->normalize($task, $format, $context);
dd($this->rangeDate);
$data['totalWork'] = $this->timeTask($task,$this->rangeDate);
return $data;
}
public function supportsNormalization($task, $format = null, array $context = []): bool
{
return $task instanceof Task;
}
}
Применение нормализатора:
Передача динамической переменной $ rangeDate из объекта Request.
$rangeDate = $request->request->get('range','all');
$serializer = new Serializer([new TaskNormalizer($normalizer,$rangeDate)]);
$data = $serializer->normalize($attendances, null, ['attributes' => $attributes]);
и это ошибка, которую я получаю:
Cannot autowire service "App\Serializer\TaskNormalizer": argument "$rangeDate" of method "__construct()" has no type-hint, you should configure its value explicitly.