0
Я пытаюсь сделать RESTful API, и когда я обрабатываю PUT
, он всегда отвечал мнеEntity формы типа в Symfony2
{
"code": 500,
"message": "The form's view data is expected to be an instance of class My\\Bundle\\Entity\\Post, but is a(n) array. You can avoid this error by setting the \"data_class\" option to null or by adding a view transformer that transforms a(n) array to an instance of My\\Bundle\\Entity\\Post."
}
Вот как я пишу PUT
действие.
public function putPostAction($postKey, Request $request){
$post = $this->getDoctrine()->getManager()->getRepository('MyBundle:Post')
->findPost($postKey);
$form = $form = $this->createFormBuilder($post,
array('data_class' => 'My\Bundle\Entity\Post'))->getForm();
// or use createForm like
// $form = $this->createForm(new PostType(), $post);
$form->submit($request);
if($form->isValid()){
$em = $this->getDoctrine()->getManager();
$em->persist($post);
$em->flush();
return $post;
}
return array(
"form" => $form
);
}
Говоря тип сущности, это выглядит как
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('cityKey')
->add('status')
->add('text')
->add('imageKey')
->add('createTime')
->add('updateTime')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'My\Bundle\Entity\Post',
'csrf_protection' => false
));
}
/**
* @return string
*/
public function getName()
{
return '';
}
Что касается сообщений об ошибке, я изменил Резольвер
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => null,
'csrf_protection' => false
));
}
На этот раз я получил другую ошибку,
{
"code": 500,
"message": "EntityManager#persist() expects parameter 1 to be an entity object, array given."
}
Любая идея? Заранее спасибо.
функция «» findPost возвращает массив объектов не один объект. Вместо этого вы должны вызвать 'find ($ id)', который возвращает только один объект post. –
@ ТурдалиевНурсултан ДА ЭТО РАБОТАЕТ! причина, по которой я пишу 'findPost ($ postKey)', - это условие select включает 'postKey' &' enabled', поскольку для преобразования массива в объект требуется трансформатор данных, альтернативно через 'find ($ postKey)' to сначала получите объект, затем используйте '$ post-> getEnabled()' для определения следующего шага. Сохраните большую часть моего времени! Спасибо друг. – Sarotti
Перемещенный комментарий к ответу, чтобы люди знали, что этот вопрос уже ответил и принят. Обычно трудно понять, была ли проблема решена или нет. Не все читают комментарии. –