Возможно, вам поможет эта форма:
Введите код
sfValidatorBase::setDefaultMessage('required', 'Field required');
в «конфигурации» вашей конфигурации приложения apps/youApp/config/yourAppConfiguration.class.php
.
Таким образом вы сможете установить значение по умолчанию для каждого типа сообщения об ошибке.
Если вы хотите установить определенные сообщения об ошибках для определенных полей, подумайте о создании класса формы, который определяет все это и позволяет всем другим формам наследоваться от этого.
Затем подклассы определяют только, какие поля должны отображаться (и, возможно, пользовательские логика проверки).
Вы можете найти пример того, как это сделать, в главе Генератор администрирования. из книги Symfony.
Это самый чистый подход ИМХО.
Изменить:
Если вы хотите оставить поля пустыми, вам нужно добавить опцию required => false
:
'email' => new sfValidatorEmail(array('required' => false))
Что касается сообщения об ошибке: похоже, что urlres
помечен как уникальный в таблице базы данных, а значение уже существует. Возможно, вам следует проверить определение схемы базы данных.
Редактировать 2:
Чтобы проверить как длину, так и уникальность, вы должны использовать sfValidatorAnd
и sfValidatorDoctrineUnique
:
$this->setValidator('urlres', new sfValidatorAnd(
array(
new sfValidatorString(
array( 'min_length' => 6, ),
array( 'required' => 'Required field',
'min_length' => 'URL must be at least %min_length% chars long.' )
),
new sfValidatorDoctrineUnique(
array( 'model' => 'yourModel',
'column' => 'theColumn',
'primary_key' => 'thePrimaryKeyColumn',
'throw_global_error' => false),
array('invalid' => "That URL already exists")
)
));
Кроме того, использование вами кода ошибки invalid
в средстве проверки строк является неправильным. Вы установили недопустимое сообщение как
URL exists
но как валидатор string может это узнать? Он только проверяет, соответствует ли данная строка критериям min_length
, max_length
или нет.
Кстати, я предполагал, что вы используете Doctrine, но я думаю, что те же валидаторы доступны для Propel.
Изменить 3.
Установите параметр 'throw_global_error' => false
. Но я не уверен, что это работает.
Вы также можете ознакомиться с исходный код, если он вам поможет.
person
Felix Kling
schedule
19.01.2010