Symfony 1.4 динамическое добавление виджетов форм без использования встроенных форм - PullRequest
1 голос
/ 11 февраля 2011

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

«Электронная почта» - это простой виджет, а не форма, поэтому использование встроенных форм, как и большинства учебников, доступных в сети, не имеет смысла.

Каков наилучший подход к этому?

1 Ответ

1 голос
/ 11 февраля 2011

Предлагаемый способ - использовать встроенную форму, но я вижу, что это не может быть полезным для вас (учитывая, что входные данные формы добавляются через Javascript).

Одно решение, которое я предлагаю (хотя и стремлюсьПосмотрите, как другие люди решат это), чтобы удалить поле email из схемы виджета и только добавить его в вашу схему проверки (с пользовательским обратным вызовом).

Не проверено, но что-то вроде руководства.

class YourForm extends sfForm {

  public function configure() {
    $this->setValidators(array(
      'email' => new sfValidatorCallback(array(
        'callback' => array($this, 'my_email_validator')
      ))
    ));
  }

  public function my_email_validator($validator, $value) {
    $email_validator = new sfValidatorEmail();
    try {
      foreach($value as $email) { // multiple fields with the same name
        $email_validator->clean($email); // throws exception when not valid
      }
    }
    catch(sfValidatorError $e) {
      // $email is invalid - notify user or whatever
      // you could also rethrow a sfValidatorError so that the form->isValid
      // would return false
    }
  }
}

И в вашем шаблоне будет поле (вручную да).

<input type="text" name="email[]" />
<input type="text" name="email[]" />
<input type="text" name="email[]" />
<input type="text" name="email[]" />

Я все еще хотел быпосмотри на предложения других, потому что это мне тоже кажется хакерским.

...