Настроить ошибки symfony - PullRequest
       12

Настроить ошибки symfony

2 голосов
/ 18 января 2010

В Symfony есть некоторые "лучшие практики" для настройки ошибок формы? Например, если бы я показывал «Кампо обязателен», когда поле является обязательным.

1) Как я могу сделать это лучше и независимо от того, какие формы называют это? 2) Как мне настроить сообщение «Объект с таким же«% namefield »уже существует».

Спасибо

обновлен

извините, но если я попытаюсь сделать 'недействительным', как вы сказали мне ... это выведет мне ту же ошибку

$this->setValidator('urlres', new sfValidatorString(array(
                          'min_length' => 6,
                        ), array(
                          'min_length' => 'URL must be longer',
                          'required'   => 'Required field',
                          'invalid' => 'URL exist'
                        )));

печатает меня: * Объект с такими же "urlres" уже существует.

обновлен Феликс, ваше решение фантастическое, но оно выдает мне эту ошибку: "urlres: этот URL уже существует"

Есть ли какой-нибудь способ удалить "поле:" ??

Спасибо

Ответы [ 3 ]

11 голосов
/ 19 января 2010

Может быть эта форма сообщения поможет вам:

Поставь код

sfValidatorBase::setDefaultMessage('required', 'Field required');

в "конфигурации" вашей конфигурации приложения apps/youApp/config/yourAppConfiguration.class.php.

Таким образом, вы сможете установить значение по умолчанию для каждого типа сообщения об ошибке.


Если вы хотите установить определенные сообщения об ошибках для определенных полей, подумайте о том, чтобы создать класс формы, который определяет все это, и пусть все другие формы наследуются от этого.
Затем подклассы только определяют, какие поля должны отображаться (и, возможно, настраиваемую логику проверки).

Пример того, как это сделать, можно найти в главе Admin Generator книги Symfony.

Это самый чистый подход ИМХО.


Edit:

Если вы хотите оставить поля пустыми, вы должны добавить опцию 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 validator узнать это ? Он только проверяет, соответствует ли данная строка критериям min_length, max_length или нет.

Кстати, я предположил, что вы используете Doctrine, но я думаю, что те же валидаторы доступны для Propel.


Редактировать 3:
Установите опцию 'throw_global_error' => false. Но я не уверен, что это работает.

Вы также можете взглянуть на исходный код , если он вам поможет.

0 голосов
/ 14 сентября 2010

Есть ли способ удалить "поле:" ??

Да: throw_global_error => true

0 голосов
/ 18 января 2010

Позвольте мне попытаться помочь вам. Вы можете легко настроить стандартные ошибки формы в методе configure вашего класса формы. Вот пример: 1)

<?php
   class myForm extends BaseMyForm
      public function configure(){
         parent::configure();
         $this->setValidator(
            'my_field' => new sfValidatorString(
               array('min_length'=>3, 'max_length'=>32, 'required'=>true),
               array('required' => 'Hey, this field is required!')
            )
         );
      }

2) Просто измените сообщение с кодом 'invalid'.

Все, что вам нужно, это просто найти действительный код сообщения для настройки определенных сообщений по умолчанию. Дополнительная информация - Формы Symfony в действии: Глава 2 - Проверка форм

Изменено:

И если вы не хотите настраивать сообщения об ошибках во всех ваших классах форм, просто создайте свой собственный базовый класс валидатора:

abstract class myBaseValidator extends sfValidatorBase

и там переопределяются стандартные «обязательные» и «недействительные» сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...