2014-11-13 2 views
1

У меня есть уникальная проверка для поля пули, и она хорошо работает в режиме создания. но я понятия не имею, как применить условный оператор в режиме редактирования.Отключить уникальное ограничение проверки в режиме редактирования symfony2

  1. если значение пробки изменилось с более старого значения (включите уникальную проверку).
  2. если слизняк не изменился (отключите уникальную проверку).

вот моя проверка:

Mockizart\StoreBundle\Entity\MockstoreCategory: 
constraints: 
    - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: slug 
properties: 
name: 
    - NotBlank: ~ 
    - Length: 
     min: 8 
     max: 50 
slug: 
    - Length: 
     min: 8 
     max: 80 
description: 
    - NotBlank: ~ 
    - Length: 
     min: 10 
     max: 255 
file: 
    - Length: 
     max: 150 
    - File : 
     maxSize: 6000000 

Я использую doctrine2 и symfony2. Благодаря!

ответ

3

Наконец он работает, вот мой код:

validation.yml: (добавить группу проверки в validation.yml)

constraints: 
    - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: 
     fields: [slug] 
     groups: [New] 

CategoryType.php: (набор статический метод, который имя возвращающихся групп массива)

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Mockizart\StoreBundle\Entity\MockstoreCategory', 
     'validation_groups' => array(
      'Mockizart\StoreBundle\Entity\MockstoreCategory', 
      'isSlugHasChange', 
     ), 
    )); 

} 

Mockizart \ StoreBundl е \ Entity \ MockstoreCategory: (по умолчанию = не уникальный валидация)

static $oldSlug; 

public static function isSlugHasChange(FormInterface $form) 
{ 
    if (self::$oldSlug) { 
     $data = $form->getData(); 
     if (self::$oldSlug == $data->slug) { 
      return array('Default'); 
     } 
    } 
    return array('Default','New'); 
} 

createAction: (установить старый слизняк статическое свойство)

 if ($id) { 
     $category = $this->getRepo('MockstoreCategory')->find($id); 
     if (!$category) { 
      throw $this->createNotFoundException(
       'No category found for id ' . $id 
      ); 
     } 
     $category::$oldSlug = $category->getSlug(); 
    } 

Ссылки: http://symfony.com/doc/current/book/forms.html#groups-based-on-the-submitted-data

Надежда это поможет кому-то, кто сталкивается с такой же проблемой. если вы знаете лучше этого, пожалуйста, дайте мне знать .. Спасибо!

Смежные вопросы