Обработчик ошибок пользовательской формы FOSRestBundle и JMSSerializer

Я написал собственный обработчик форм для JMSSerializerBundle, который я использую с FOSRestBundle. Согласно документация это должно быть так же просто, как правильно пометить службу. Но мой пользовательский обработчик никогда не привыкает.

Вот обработчик:

<?php

namespace AppBundle\Handler;

use JMS\Serializer\Handler\FormErrorHandler as JMSFormErrorHandler;

class FormErrorHandler extends JMSFormErrorHandler
{
public function serializeFormToJson(\JMS\Serializer\JsonSerializationVisitor $visitor, \Symfony\Component\Form\Form $form, array $type)
{
$this->convertFormToArray($visitor, $form);
}

private function getErrorMessage(FormError $error)
{
if (null !== $error->getMessagePluralization()) {
return $this->translator->transChoice($error->getMessageTemplate(), $error->getMessagePluralization(), $error->getMessageParameters(), 'validators');
}

return $this->translator->trans($error->getMessageTemplate(), $error->getMessageParameters(), 'validators');
}

private function convertFormToArray(GenericSerializationVisitor $visitor, Form $data)
{
$isRoot = null === $visitor->getRoot();

$form = $errors = array();
foreach ($data->getErrors() as $error) {
$errors[] = $this->getErrorMessage($error);
}

if ($errors) {
$form['errors'] = $errors;
}

$children = array();
foreach ($data->all() as $child) {
if ($child instanceof Form) {
$children[$child->getName()] = $this->convertFormToArray($visitor, $child);
}
}

if ($children) {
$form = array_merge($form , $children);
}

if ($isRoot) {
$visitor->setRoot($form);
}

return $form;
}
}

Вот служба регистрации

services:
my_form_error_handler:
class: AppBundle\Handler\FormErrorHandler
arguments: ["@translator"]
tags:
- {name: jms_serializer.subscribing_handler}

Мне не нужно сильно менять, так что по большей части я просто расширяю оригинал и меняю функции, которые мне нужно было изменить.

Там нет ошибок. Все выполняется так, как если бы не было переопределенного класса, и он просто использует FormErrorHandler по умолчанию, найденный в JMSSerializer. Это как-то связано с использованием FOSRestBundle? Для хихиканья, в случайном контроллере я пробовал $this->get('my_form_error_handler') и это сработало, так что я знаю, что служба зарегистрирована. Любая помощь приветствуется.

Благодарю.

2

Решение

Вы не включаете обработчик ошибок формы, помечая, но устанавливая jms_serializer.form_error_handler.class параметр, указывающий на ваш класс:

parameters:
jms_serializer.form_error_handler.class: AppBundle\Handler\FormErrorHandler

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]