Ich habe diesem Leitfaden so genau wie möglich gefolgt, um eine einfache REST-API in Symfony2 zu erstellen.
Leider erhalte ich immer, egal was ich an die API poste:
{"children":{"firstName":{"errors":["Dieser Wert darf nicht leer sein."]},"lastName":{"errors":["Dieser Wert darf nicht leer sein."]},"email":{"errors":["Dieser Wert darf nicht leer sein."]},"password":{"errors":["Dieser Wert darf nicht leer sein."]},"dob":{"errors":["Dieser Wert darf nicht leer sein."],"children":{"year":[],"month":[],"day":[]}},"tutorialWatched":{"errors":["Dieser Wert darf nicht leer sein."]},"challengeEmails":{"errors":["Dieser Wert darf nicht leer sein."]},"mailingList":{"errors":["Dieser Wert darf nicht leer sein."]}}}
Meine Validierung sieht wie folgt aus:
LifeMirror\APIBundle\Model\Users:
properties:
firstName:
- NotBlank:
lastName:
- NotBlank:
email:
- NotBlank:
- Email:
password:
- NotBlank:
dob:
- NotBlank:
- Date:
tutorialWatched:
- NotBlank:
- Choice:
choices: [0, 1]
challengeEmails:
- NotBlank:
- Choice:
choices: [0, 1]
mailingList:
- NotBlank:
- Choice:
choices: [0, 1]
Und mein Controller ist:
class RegisterController extends Controller
{
public function indexAction()
{
return $this->processForm(new Users());
}
private function processForm(Users $user)
{
$statusCode = $user->isNew() ? 201 : 204;
$form = $this->createForm(new UsersType(), $user);
$form->bind($this->getRequest());
if ($form->isValid()) {
$user->save();
$response = new Response();
$response->setStatusCode($statusCode);
return $response;
}
$view = View::create($form, 400);
$view->setFormat('json');
return $view;
}
}
Ich kann $this->getRequest()
mit var_dump ausgeben und sehe, dass die Daten vorhanden sind, aber ich bin mir nicht sicher, warum der Validator sich beschwert.
EDIT:
Hier ist das Formular:
namespace LifeMirror\APIBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class UsersType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('firstName');
$builder->add('lastName');
$builder->add('email');
$builder->add('password');
$builder->add('dob');
$builder->add('tutorialWatched');
$builder->add('challengeEmails');
$builder->add('mailingList');
}
/**
* {@inheritdoc}
*/
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'LifeMirror\APIBundle\Model\Users',
'csrf_protection' => false,
);
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'users';
}
}
Und meine Eingabe:
EDIT 2: Inhalt von $_REQUEST:
array(9) { ["firstName"]=> string(5) "James" ["lastName"]=> string(6) "Hadley" ["email"]=> string(9) "fd@fd.com" ["password"]=> string(7) "test123" ["dob"]=> string(33) "{'year':1991,'month':08,'day':02}" ["location"]=> string(9) "Lancaster" ["tutorialWatched"]=> string(1) "0" ["challengeEmails"]=> string(1) "0" ["mailingList"]=> string(1) "0" }
EDIT 3: HTML-Formular: