2015-08-23 2 views
0

У меня проблема с Assert/NotBlank(). Он просто не работает. Каждый раз, когда я отправляю пустую форму, я вижу 500, SQLSTATE[23000]: Integrity constraint violation: 1048 Column '***' cannot be null вместо некоторой ошибки.Symfony2/Валидация - Проверка NotBlank не работает

У меня есть это в сущности: use Symfony\Component\Validator\Constraints as Assert;

... 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="text", type="text") 
    * @Assert\NotBlank() 
    */ 
    private $text; 
    ... 

EXTRA: Контроллер: контроллер для добавления объявлений в базу данных.

public function insertAdAction($categoryId, Request $request) 
    { 
     $em = $this->getDoctrine()->getManager(); 
     $category = $em->getRepository('DbBundle:Category')->findAll(); 
     $ads = new Ads(); 
     $form = $this->createForm(new InsertAdType(), $ads, array(
      'categoryId' => $categoryId, 
      'name' => $request->cookies->get('name'), 
      'phone' => $request->cookies->get('phone'), 
      'email' => $request->cookies->get('email'), 
      'password' => $request->cookies->get('password'), 

     )); 
     $form->handleRequest($request); 
     if ($form->isValid()) { 
      try { 
       $user = new User(); 
       $validator = $this->get('validator'); 
       $validator->validate($ads); 
       $byCategory = $em->getRepository('DbBundle:Category')->findOneBy(array('id' => $categoryId), array()); 
       $categoryName = $byCategory->getName(); 
       $phone = $form['phone']->getData(); 
       $ads->setCategory($categoryName); 
       $ads->setCategoryUrl($this->get('WebPortalBundle')->seoUrl($categoryName)); 
       $ads->setCountry($form['country']->getData()); 
       $ads->setText(nl2br($form['text']->getData())); 
       $ads->setTitleUrl($this->get('WebPortalBundle')->seoUrl($form['title']->getData())); 
       $ads->setSubcategoryUrl($this->get('WebPortalBundle')->seoUrl($form['subcategory']->getData())); 
       $ads->setIp($request->getClientIp()); 
       if (!$em->getRepository('DbBundle:User')->findOneBy(array('phone' => $form['phone']->getData()))) { 
        $user->setPhone($phone); 
        $em->persist($user); 
       } 
       $ads->setPath(implode(',', $this->uploadImg($form['file']->getData()))); 
       $em->persist($ads); 
       $em->flush(); 
       $response = new Response(); 
       $time = time() + 31536000; 
       $response->headers->setCookie(new Cookie('name', $form['name']->getData(), $time)); 
       $response->headers->setCookie(new Cookie('email', $form['email']->getData(), $time)); 
       $response->headers->setCookie(new Cookie('phone', $form['phone']->getData(), $time)); 
       $response->headers->setCookie(new Cookie('password', $form['password']->getData(), $time)); 
       $response->send(); 
      } catch (Exception $ex) { 
       throw new \ErrorException; 
      } 
     } 
     return $this->render('WebPortalBundle:Default/InsertAd:insertAd.html.twig', array('category' => $category, 'insertForm' => $form->createView()), $this->get('WebPortalBundle')->cache($request)); 
    } 

Что делать неправильно?

+0

Можете ли вы показать нам код в вашем контроллере? –

+0

Хорошо, он такой большой. –

+0

Вы [проверяете форму] (http://symfony.com/doc/current/book/validation.html#validation-and-forms) на submit? Эта аннотация сама по себе недостаточна. – MarcoReni

ответ

0

Держу пари, что у вас нет метода setDefaultOptions в вашем виде.

use Symfony\Component\OptionsResolver\OptionsResolver; 
... 

public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'DBBundle\Entity\Ads', 
     )); 
    } 
+0

я это в formtype 'общественная функция configureOptions (OptionsResolver $ распознаватель) { $ resolver-> SetDefaults (массив ( 'CategoryId' => NULL, 'имя' => NULL, 'телефон' => NULL, 'электронная почта' => NULL, 'пароль' => NULL, 'data_class' => 'DbBundle \ Entity \ Объявления', 'csrf_protection' => true, 'csrf_field_name' => '_token', )); } ' ' setDefaultOptions' устарел –

+0

Вы правы, я просто копирую пасту код. Поэтому не знаю, что с этим случилось. – malcolm