2011-12-16 2 views
1

Мне нужно создать поле, которое в качестве опции получает строку регулярных выражений.Symfony2 - Проверка правильности

Итак, я сделал поле PatternType:

public function getDefaultOptions(array $options) 
{ 

    $defaultOptions = array(
     'data'    => null, 
     'data_class'  => null, 
     'trim'    => true, 
     'required'   => true, 
     'read_only'   => false, 
     'max_length'  => null, 
     'pattern'   => null, 
     'property_path'  => null, 
     'by_reference'  => true, 
     'error_bubbling' => false, 
     'regexp'   => false, 
     'error_mapping'  => array(), 
     'label'    => null, 
     'attr'    => array(), 
     'invalid_message' => 'This value is not valid', 
     'invalid_message_parameters' => array() 
    ); 

    $class = isset($options['data_class']) ? $options['data_class'] : null; 

    // If no data class is set explicitly and an object is passed as data, 
    // use the class of that object as data class 
    if (!$class && isset($options['data']) && is_object($options['data'])) { 
     $defaultOptions['data_class'] = $class = get_class($options['data']); 
    } 

    if ($class) { 
     $defaultOptions['empty_data'] = function() use ($class) { 
      return new $class(); 
     }; 
    } else { 
     $defaultOptions['empty_data'] = ''; 
    } 


    $patt = $options['regexp']; 

    unset($options['regexp']); 

    $defaultOptions['validation_constraint'] = new Regex(
                 array(
                  'pattern' => $patt, 
                  'match' => true, 
                  'message' => 'Niewłaściwy format' 
                  ) 
                 ); 


    var_dump($defaultOptions); 


    return $defaultOptions; 
} 

var_dump возвращает хорошо отформатированные настройки массива, с регулярным выражением объектом внутри - но когда форма генерируется проверка не работает - передать любое значение. Любая идея почему?

ответ

1

Почему вы это делаете? Уже есть regex validator. Просто используйте нормальное текстовое поле с этим валидатором.

Если вам нужна форма без класса модели для привязки, прочитайте the corresponding section.

+0

Я сделал это выше: созданное поле, которое расширяет абстрактный тип и возвращает массив параметров по умолчанию с validator_constant = new Regex (params). – McOffsky

+0

(продолжение предыдущего сообщения) Что я делаю, это приложение, которое генерирует форму на основе xsd-файлов. Сначала мы переводим его в статические классы php с атрибутами для полей (например, шаблона или типа), записанных в аннотациях. Каждый xsd-файл имеет довольно большую структуру дерева, включая другие файлы, с их атрибутами. Очевидно, мне нужны некоторые настраиваемые поля для проверки, например, польского налогового плательщика (у нас есть шаблон, написанный как атрибут для поля). Проблема в том, что доцент работает. – McOffsky

+0

... И аннотации, которые мы делаем, не являются аннотациями проверки symfony2 - мы передаем гораздо больше информации через это, поэтому форма создается formbuilder-> add(); – McOffsky

0

Хорошо, я нашел, что не так - вы можете добавить константу валидатора только в корневой объект формы (другие symfony просто игнорируют). Поэтому кажется, что мне нужно просто получить корневую форму, добавьте там validator_constant с параметром validator_group. Затем просто назначьте правильное поле validator_group.

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