Я довольно новичок в SF2 сообщество, поэтому, пожалуйста, успокойся;)JMSSerializer + формы/массивы
я столкнулся вопрос с JMSSerializerBundle и формами/массивами. Я потратил два дня, пытаясь понять это сам, без каких-либо успехов, и я решил опубликовать это в Группе.
Я создаю простое тестовое приложение, которое позволит мне понять, как работает материал. Теперь пришло время для API. Я использую FOSRestBundle, отлично работает. Все мое «приложение» работает отлично (разработка была очень быстрой и эффективной), я узнал, как использовать компонент безопасности, брандмауэры, маршрутизацию, Doctrine (однако я работал с ним в прошлом, хотя), написание собственных поставщиков аутентификации - I Фактически, это часть его.
Формы выпуска: я создал простой ArticleController в моем APIBundle (пожалуйста, игнорируйте текст ответа, я только что удалили мой код во время отладки, чтобы сделать его более удобным для чтения):
namespace Veron\ApiBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\View\View;
use Veron\ApiBundle\Form\Type\ArticleType;
use Veron\CoreBundle\Entity\Article;
class ArticleController extends Controller
{
public function createAction()
{
return $this->processForm(new Article());
}
private function processForm(Article $article)
{
$em = $this->getDoctrine()->getManager();
$form = $this->createForm(new ArticleType(), $article, array(
'csrf_protection' => false
));
$form->bind($this->getRequest());
if ($form->isValid()) {
return new Response('Everything ok');
}
$view = View::create($form, 400);
return $this->get('fos_rest.view_handler')->handle($view);
}
}
Как вы можете см. также у меня есть класс типа ArticleType:
namespace Veron\ApiBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('description')
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Veron\CoreBundle\Entity\Article',
'csrf_protection' => false,
));
}
public function getName()
{
return 'article';
}
}
что это проблема? При отправке запроса, в XML или JSON - когда данные формы не подтверждено - я получаю ошибки (ну отформатированный по JMSSerializer):
JSON пример:
{"errors":["This value should not be blank."],"children":{"title":{"errors":["This value is too short. It should have 5 character or more."]},"description":{"errors":["This value should not be blank."]}}}
XML Пример:
<?xml version="1.0" encoding="UTF-8"?>
<form name="article">
<errors>
<entry><![CDATA[This value should not be blank.]]></entry>
</errors>
<form name="title">
<errors>
<entry><![CDATA[This value should not be blank.]]></entry>
</errors>
</form>
<form name="description">
<errors>
<entry><![CDATA[This value should not be blank.]]></entry>
</errors>
</form>
</form>
Мой первый вопрос: есть ли какой-либо автоматизированный способ изменения вывода ошибок в сериализованной форме?
У меня также есть проблема, связанная с первой, я полагаю. При возврате одного объекта, я следующая структура XML вернулась:
<article>
<id>10</id>
<title>Test article</title>
</article>
при возвращении массива (несколько статей) Выход:
<result>
<entry>
<id>1</id>
...
</entry>
<entry>
<id>10</id>
...
</entry>
</result>
Второго вопрос: как изменить/структуру JSON ответа XML?
Благодарим за отзыв. Что я хотел бы достичь? В случае ошибок формы я хотел бы иметь простую структуру: ' Значение не должно быть пустым '. То же самое касается сериализованных массивов, я хотел бы иметь '' как элемент корня XML и '' в качестве своих дочерних элементов. У вас такие проблемы решены в стиле Symfony 2? –
user1854344