Проблема заключается в том, как вы строите свой сериализатор, а точнее DateTimeNormalizer.Вы можете видеть ошибку , которая запускается в конструкторе этого класса всякий раз, когда не предоставлен контекст.
Простым решением было бы передать массив в качестве первого аргумента:
new Serializer(
array(
new DateTimeNormalizer(array('datetime_format' => 'd.m.Y')),
new GetSetMethodNormalizer()
),
array(
'json' => new JsonEncoder()
)
);
Так что просто замените d.m.Y
на array('datetime_format' => 'd.m.Y')
.
Так как вы все равно передаете SerializerInterface, вы можете вместо этого настроить ваш сериализатор в своем services.yaml:
services:
_defaults:
... # other default settings
bind:
Symfony\Component\Serializer\SerializerInterface $dateSerializer: '@app.date_serializer'
Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer: ~
Symfony\Component\Serializer\Encoder\JsonEncoder: ~
app.date_normalizer:
class: Symfony\Component\Serializer\Normalizer\DateTimeNormalizer
arguments:
- { 'datetime_format': 'd.m.Y' }
app.date_serializer:
class: Symfony\Component\Serializer\Serializer
arguments:
- ['@app.date_normalizer', '@Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer']
- ['@Symfony\Component\Serializer\Encoder\JsonEncoder']
В вашем контроллере вы можете просто ввести свой сериализатор, изменив имя аргумента
public function index($slug, Request $request, SerializerInterface $dateSerializer)
Фактически, где бы вы ни хотели использовать этот сериализатор, вы можете получить его, просто вставив его с SerializerInterface $dateSerializer
спасибок привязке в конфигурации вашего сервиса.
Примечание: привязка будет работать только с Symfony 4.2.В более старых версиях вы должны удалить тип в начале (SerializerInterface), так как это новая функция.Я думаю, что все остальное должно работать с Symfony 3.4 и 4.0.