Cześć,
Mam kolejny problem z symfony i fosrestbundle
Przesyłam takie dane:
{
"name": "asd",
"nameKey": "AS",
"description": "Simple desc",
"priority": "1",
"deadline": "2016-09-01 21:02:20",
"active": true,
"assignedCustomers": {},
"assignedUsers": {}
}
Do kontrolera:
/**
* @FOSRest\Post("/project")
*/
public function postProjectAction(Request $request)
{
$project = new Project();
$project->setCreatedBy($this->getUser()->getUser());
$project->setCreatedAt(new \DateTime());
$form = $this->createForm(ProjectType::class, $project);
$form->submit($request->request->all());
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($project);
$em->flush();
return new JsonResponse([
'status' => 'created'
], 200);
}
return new JsonResponse($form->getErrors(true, false), 400);
}
$form->isValid usilnie zwraca false ($form->isSubmitted() zwraca true), niestety w odpowiedzi w której powinny być błędy dostaję tylko pustą tablicę.
ProjectType:
class ProjectType extends AbstractType
{
private $priorityToNumberTransformer;
private $userToNumberTransformer;
private $customerToNumberTransformer;
public function __construct(PriorityToNumberTransformer $priorityToNumberTransformer, UserToNumberTransformer $userToNumberTransformer, CustomerToNumberTransformer $customerToNumberTransformer)
{
$this->priorityToNumberTransformer = $priorityToNumberTransformer;
$this->userToNumberTransformer = $userToNumberTransformer;
$this->customerToNumberTransformer = $customerToNumberTransformer;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class,
[
'label' => 'label.name'
]
)
->add('nameKey', TextType::class,
[
'label' => 'label.nameKey'
]
)
->add('description', TextareaType::class,
[
'label' => 'label.description'
]
)
->add('deadline', DateTimeType::class,
[
'label' => 'label.deadline',
'widget' => 'single_text',
'html5' => false,
'attr' => [
'class' => 'bootstrap-datetimepicker'
],
'format' => 'yyyy-mm-dd HH:ii'
]
)
->add('active', ChoiceType::class,
[
'label' => 'label.active',
'choices' => [
'label.yes' => true,
'label.no' => false
]
]
)
->add('priority', EntityType::class,
[
'class' => Priority::class,
'choice_label' => 'name',
'label' => 'label.priority',
]
)
->add('assignedUsers', EntityType::class,
[
'class' => User::class,
'choice_label' => 'email',
'label' => 'label.',
'multiple' => true,
]
)
->add('assignedCustomers', EntityType::class,
[
'class' => Customer::class,
'choice_label' => 'email',
'label' => 'label.',
]
)
;
$builder->get('priority')->addModelTransformer($this->priorityToNumberTransformer);
$builder->get('assignedUsers')->addModelTransformer($this->userToNumberTransformer);
$builder->get('assignedCustomers')->addModelTransformer($this->customerToNumberTransformer);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Project::class,
]);
}
}
Dodam że dokładnie to samo przy użyciu zwykłego formularza działa bez problemu.
Macie jakiś pomysł dlaczego nie zwraca błędów lub podpowiecie mi jaka klasa realnie sprawdza form (abym mógł ją zdebugować)