Ich entwickle eine Symfony 2.6.1 Anwendung validieren, und ich habe eine Form, ich mit dem FormTypes und einer Entität mit Anmerkungen als Validierungs machen. Das Formular sendet einen AJAX POST-Aufruf an einen FOSRestController. Die Sache ist die isValid()
Funktion zurückkehrt FALSCH und ich erhalte keine Fehlermeldungen ...Symfony2 des FOSRestController kann nicht eine Ajax-Post-Anforderung
Mein FOSRestController sieht wie folgt aus:
class RestGalleryController extends FOSRestController{
/**
* @Route(requirements={"_format"="json"})
*/
public function postGalleriesAction(\Symfony\Component\HttpFoundation\Request $request){
return $this->processForm(new \Law\AdminBundle\Entity\Gallery());
}
private function processForm(\Law\AdminBundle\Entity\Gallery $gallery){
$response = array('result' => 'Default');
$gallery->setName('TEST'); //Just added this to be sure it was a problem with the validator
$form = $this->createForm(
new \Law\AdminBundle\Form\Type\GalleryType(),
$gallery
);
$form->handleRequest($this->getRequest());
if ($form->isValid()) {
$response['result'] = 'Is Valid!';
}else{
var_dump($form->getErrorsAsString());
die;
}
return $response;
}
My Gallery Entity-Klasse unter:
<?php
namespace Law\AdminBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
/**
* Gallery
*
* @ORM\Table(name="gallery")
* @ORM\Entity
*/
class Gallery{
/**
* @var string
* @Assert\NotBlank()
* @ORM\Column(name="name", type="text", nullable=false)
*/
private $name;
public function __construct(){
$this->images = new ArrayCollection();
}
/**
* Set name
*
* @param string $name
* @return Gallery
*/
public function setName($name){
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName(){
return $this->name;
}
}
Die GalleryType , das Formular einkapselnd:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class GalleryType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('name');
}
/**
* {@inheritdoc}
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Law\AdminBundle\Entity\Gallery',
'csrf_protection' => false,
));
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'Gallery';
}
}
Schließlich in meinem ap p/config/config.yml wird die Validierung wie folgt festgelegt:
validation: { enable_annotations: true }
den Validierungsfehler bekommen ich auch mit der folgenden Funktion versucht haben, ohne Erfolg:
private function getErrorMessages(\Symfony\Component\Form\Form $form) {
$errors = array();
foreach ($form->getErrors() as $key => $error) {
if ($form->isRoot()) {
$errors['#'][] = $error->getMessage();
} else {
$errors[] = $error->getMessage();
}
}
foreach ($form->all() as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}
return $errors;
}
EDIT:
Wenn ich manuell einen Validator verwenden, funktioniert es:
$formGallery = new Gallery();
$formGallery->setName($this->getRequest()->get('name', NULL));
$validator = $this->get('validator');
$errors = $validator->validate($formGallery);
Es ist also so, als hätte mein GalleryType den Validator nicht benutzt.
Haben Sie Ihre Protokolle überprüft? Wenn Ihr Formular den Validator überhaupt nicht verwendet hat, erhalten Sie einen Fehler, weil '$ name' nicht' null' sein kann. Du hast "Gültig" nicht bekommen? –
Können Sie versuchen, die Zeile zu ersetzen, in der Sie das Formular in Ihrem Controller erstellen: '$ this-> container-> get ('form.factory') -> createNamed ('', new \ Law \ AdminBundle \ Form \ Typ \ GalleryType(), $ gallery); ' –
Hat meine Antwort Ihr Problem gelöst? –