Проблема привязки формы Symfony: пустой массив - PullRequest
0 голосов
/ 01 марта 2010

Мне сложно понять, почему моя форма Symfony не связывается должным образом с данными из запроса ...

Акция:

public function executeSendEmail(sfWebRequest $request)
  {
      $history_id = $request->getParameter('id');

      if($request->isMethod(sfRequest::POST))
      {
            print_r("POST");

            $this->form = new SendEmailForm();

            $this->form->bind($request->getParameter('email_form'));
            print_r($request->getParameter('email_form'));

            if(!$this->form->isBound())
                    die('!isBound()');

            print_r($this->form->getValues());

            if($this->form->isValid())
            {
                die('form is Valid!');
            }
            die('after isValid...');
      }

      die('redirect !');

      $this->redirect('history/show?id='.$history_id);
  }

Форма класса:

class SendEmailForm extends sfForm
{
   public function setup()
   {
    $this->setWidgets(array(
      'author'  => new sfWidgetFormInputText(),
      'email'   => new sfWidgetFormInputText(),
      'subject' => new sfWidgetFormInputText(),
      'body'    => new sfWidgetFormTextarea(),
    ));

    $this->setValidator('email', new sfValidatorEmail());


    $this->widgetSchema->setLabels(array(
          'author'  =>  'Autor',
          'email'   =>  'E-mail',
          'subject' =>  'Tytuł',
          'body'    =>  'Treść wiadomości'
    ));

    $this->widgetSchema->setNameFormat('email_form[%s]');

    $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);

    parent::setup();
   }
}

При вводе действия $request->getParameter('email_form') содержит:

Array ( 
        [author] => RRr 
        [email] => rr@rrr.com 
        [subject] => rrrr 
        [body] => rrrr 
        [_csrf_token] => 73881c1b6217e221c4d25c065ec93052 ) 

так что это выглядит правильно, но тем не менее привязка завершается неудачно, потому что $this->form->getValues() возвращает пустой массив (), и я не знаю, почему; s?! Какие-либо предложения ? Спасибо заранее

Ответы [ 4 ]

2 голосов
/ 19 марта 2012

Вы можете проверить, что ошибки такие:

  if($this->form->hasErrors())
  {
    echo $this->form->renderGlobalErrors();
  }

Если вы сами генерируете форму, а не используете помощника Symfony, возможно, вы не включили / отключили токен csrf.

2 голосов
/ 20 октября 2011

Вы должны использовать getValues() после , когда вы проверили, что форма действительна. В противном случае in вернет пустой массив.

1 голос
/ 01 марта 2010

Кажется, у тебя класс формы.

Попробуйте это в своем действии:

$this->form = new SendEmailForm();
if($request->isMethod('post')) 
{
    $this->form->bind($request->getParameter('email_form'));
    if($this->form->isValid()) 
    {
        $values = $this->form->getValues();
        var_dump($values['author']);
0 голосов
/ 20 октября 2011

Метод bind() работает примерно так, как показано ниже, поэтому, если ваша форма недействительна, вы получите пустой массив.

try
{
  $this->doBind(...);
  ...
}
catch (sfValidatorErrorSchema $e)
{
  $this->values = array(); //here
  $this->errorSchema = $e;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...