我认为标题说明了一切。表单按原样呈现,但是当我决定为它编写InputFilter
时,一切都开始了。表格仍然呈现,但当然我必须适应它周围的东西。现在,无论发送POST请求(Firebug同意),getPost()
方法现在都返回false。
动作(在控制器中):
public function contactAction () {
$form = new ContactForm();
$request = $this->getRequest();
if ($request->isPost()) {
$vm = new ViewModel();
$vm->setTerminal(true);
$form->setData($request->getPost());
if($form->isValid()) {
$to = "";
$from = $request->getPost("email");
$name = $request->getPost("nome");
$subject = "Message sent by ".$name." (phone ".$request->getPost("phone").")";
$body = $request->getPost("message");
$mail = new SendEMail($to, $from, $subject, $body);
if (!$mail) {
$vm->setVariables(array(
"result" => "Error while sending. Retry."
));
return $vm;
} else {
$vm->setVariables(array(
"result" => "Thank you! We'll answer as soon as possible."
));
return $vm;
}
} else {
$vm->setVariables(array(
"result" => "Some fields aren't properly fullfilled."
));
return $vm;
}
} else {
return new ViewModel(array (
"welcome" => $this->homeService->findText(),
"form" => $form,
));
}
}
表格类:
<?php
namespace Site\Form;
use Zend\Form\Form;
use Zend\Form\Element;
class ContactForm extends Form {
public function __construct($name=null, $options=array ()) {
parent::__construct ($name, $options);
$this->setAttributes(array(
"action" => "./",
));
$nameInput = new Element\Text("nome");
$nameInput->setAttributes(array(
"placeholder" => "Nome e cognome",
"tabindex" => "1"
));
$this->add($nameInput);
$emailInput = new Element\Text("email");
$emailInput->setAttributes(array(
"placeholder" => "Indirizzo e-mail",
"tabindex" => "2"
));
$this->add($emailInput);
$phoneInput = new Element\Text("phone");
$phoneInput->setAttributes(array(
"placeholder" => "Numero di telefono",
"tabindex" => "3",
));
$this->add($phoneInput);
$messageArea = new Element\Textarea("messaggio");
$messageArea->setAttributes(array(
"placeholder" => "Scrivi il tuo messaggio",
"tabindex" => "4"
));
$this->add($messageArea);
$submitButton = new Element\Button("submit");
$submitButton
->setLabel("Invia messaggio")
->setAttributes(array(
"type" => "submit"
));
$this->add($submitButton);
$resetButton = new Element\Button("reset");
$resetButton
->setLabel("Cancella")
->setAttributes(array(
"type" => "reset"
));
$this->add($resetButton);
$this->setInputFilter(new ContactInputFilter());
}
}
?>
InputFilter类:
<?php
namespace Site\Form;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Input;
use Zend\Validator;
class ContactInputFilter extends InputFilter {
public function init() {
$nome = new Input("nome");
$nome->getValidatorChain()
->attach(new Validator\StringLength(3));
$email = new Input("email");
$email->getValidatorChain()
->attach(new Validator\EmailAddress());
$phone = new Input("phone");
$phone->getValidatorChain()
->attach(new Zend\I18n\Validator\PhoneNumber());
$message = new Input("message");
$phone->getValidatorChain()
->attach(new Validator\StringLength(10));
$this->add($nome)
->add($email)
->add($phone)
->add($message);
}
}
?>
文档没有那么有用,这里的类似线程看起来像是有一个不同的问题(我没有)。有任何想法吗?谢谢。
修改
在执行var_dump($ request-&gt; isPost())之后,我注意到如果收到post数据,它返回true。然后我不知道现在发生了什么。
答案 0 :(得分:0)
嗯,我明白了。由于我的动作是我之前的2个动作的合并,我仍然有一些代码对于不同的模板有用。问题不是getPost()
返回false,而是视图接收到意外数据。现在我的行动是:
public function contactAction () {
$form = new ContactForm();
$request = $this->getRequest();
$vm = new ViewModel();
$vm->setTerminal(true);
$vm->setTemplate("Site\Skeleton\Email"); //here the proper template is set
if ($request->isPost()) {
$form->setData($request->getPost());
if($form->isValid()) {
$to = "";
$from = $request->getPost("email");
$name = $request->getPost("nome");
$subject = "Messaggio inviato da ".$name." (tel. ".$request->getPost("phone").")";
$body = $request->getPost("messaggio");
$mail = new SendEMail($to, $from, $subject, $body);
if (!$mail) {
$vm->setVariables(array(
"result" => "Error while sending. Retry."
));
return $vm;
} else {
$vm->setVariables(array(
"result" => "Thank you! We'll answer as soon as possible."
));
return $vm;
}
} else {
$vm->setVariables(array(
"result" => "Some fields aren't properly fullfilled."
));
return $vm;
}
} else {
return new ViewModel(array (
"welcome" => $this->homeService->findText(),
"form" => $form,
));
}
}
现在我有另一个问题,所以我将转发到另一个线程。