我在理解为什么我的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 ?!
有什么建议 ?
Thx提前
答案 0 :(得分:2)
您必须在之后使用getValues()
检查表单是否有效。否则将返回一个空数组。
答案 1 :(得分:2)
您可以测试以查看错误是什么:
if($this->form->hasErrors())
{
echo $this->form->renderGlobalErrors();
}
如果您自己生成表单,而不是使用Symfony帮助程序,则可能没有包含/禁用csrf标记。
答案 2 :(得分:1)
您的表单类似乎没问题。
在您的行动中尝试此操作:
$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']);
答案 3 :(得分:0)
bind()
方法正在执行类似下面的操作,因此如果您的表单无效,您将获得一个空数组。
try
{
$this->doBind(...);
...
}
catch (sfValidatorErrorSchema $e)
{
$this->values = array(); //here
$this->errorSchema = $e;
}