2010-03-01 8 views
0

j'ai quelques difficultés à comprendre pourquoi mon formulaire de symfony ne se lie pas correctement avec les données de demande ...forme symfony contraignant question: tableau vide

L'action:

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); 
    } 

classe Forme:

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(); 
    } 
} 

Lors de la saisie de l'action du $request->getParameter('email_form') contient:

Array ( 
     [author] => RRr 
     [email] => [email protected] 
     [subject] => rrrr 
     [body] => rrrr 
     [_csrf_token] => 73881c1b6217e221c4d25c065ec93052) 

alors cela semble correct mais néanmoins la liaison échoue car $this->form->getValues() retourne array() vide et je ne sais pas pourquoi; s? Des suggestions? Thx à l'avance

Répondre

1

Votre classe de formulaire semble correcte.

Essayez ceci dans votre action:

$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']); 
2

Vous devez utiliser getValues()après vous vérifié le formulaire est valide. Sinon, retournera un tableau vide.

0

La méthode bind() fait quelque chose comme ci-dessous, donc si votre formulaire n'est pas valide, vous obtiendrez un tableau vide.

try 
{ 
    $this->doBind(...); 
    ... 
} 
catch (sfValidatorErrorSchema $e) 
{ 
    $this->values = array(); //here 
    $this->errorSchema = $e; 
} 
2

Vous pouvez tester pour voir ce que les erreurs sont comme ça:

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

Si vous générez un formulaire vous-même, plutôt que d'utiliser l'aide Symfony, vous pourriez ne pas avoir inclus/désactivé la jeton csrf.