私のプロジェクトには、インデックスや会社概要などのほとんどのページで呼び出される一般的な「お問い合わせフォーム」があります。このページは、ユーザー入力を受け入れ、管理者にメールを送信してから、ページに戻ります。
お問い合わせフォームのコードは
class Form_Contactus extends Zend_Form
{
public function init()
{
$this->setMethod('post');
$this->setAction('contactus/index');
$frontController = Zend_Controller_Front::getInstance();
$pageName = $this->createElement('hidden','pageName');
$pageName->setValue( $frontController->getRequest()->getControllerName() );
$FullName = $this->createElement('text','FullName');
$FullName->setLabel('Full Name')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$Email = $this->createElement('text','Email');
$Email->setLabel('Email')
->setRequired(true)
->addFilter('StringTrim')
->addValidator('EmailAddress')
->addValidator('NotEmpty');
$Message = $this->createElement('textarea','Message');
$Message->setLabel('Message')
->setAttribs( array('rows' => 3, 'cols' => 20 ))
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$submit = $this->createElement('submit','submit');
$submit->setLabel('Submit')
->setIgnore(true);
$this->addElements(array( $pageName,
$FullName,
$Email,
$Message,
$submit, )
);
}
}
$ this-> setAction('contactus / index');という行に注意してください。私の考えでは、インデックスページからこのフォーム(一般的なフォームであることに注意してください)に入力すると、「contactuscontroller」インデックスアクションを通過します。そこからメールを送信し、インデックスページに戻ります。ページが私たちについてのページから埋められると、私たちについてのページに戻ります。
インデックス、バージョン情報などのさまざまなページにコードで含まれています
$conForm = new Form_Contactus();
echo $conForm;
そして、コントローラーコードは次のようになります
class ContactusController extends Zend_Controller_Action
{
protected $_redirector = null;
public function init()
{
$registry = Zend_Registry::getInstance();
$this->msgObj = $registry['MessageHandler'];
}
public function indexAction()
{
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$form = new Form_Contactus();
if ($this->_request->isPost()) {
$formData = $this->_request->getPost();
if ($form->isValid($formData)) {
$pageName = $formData['pageName'];
$FullName = $formData['FullName'];
$Email = $formData['Email'];
$Message = $formData['Message'];
if( strlen(trim( $FullName) ) ){
$mailBody .= "Name:\r\n\t".$FullName ."\r\n\r\n";
$mailBody .= "Email:\r\n\t".$Email ."\r\n\r\n";
$mailBody .= "Message:\r\n\t".$Message ."\r\n\r\n";
$mail = new Zend_Mail();
$transport = new Zend_Mail_Transport_Smtp('localhost');
Zend_Mail::setDefaultTransport($transport);
$mail->setSubject('Contact Enquiry.');
$mail->setFrom($Email, $FullName);
$mail->addTo(CONTACT_ADMIN_EMAIL, CONTACT_ADMIN_NAME);
$mail->setBodyText($mailBody);
if( $mail->send() ){
$this->msgObj->addMessage('Thank you!');
$this->msgObj->addMessage('Your message has been received and will be reviewed within 72 hours.');
}
else{
$this->msgObj->addError('Unable to sent mail! Please try later.');
}
}
}
else {
$this->msgObj->addError('Please correct the following:!');
$form->populate($formData);
$pageName = 'index';
}
}
$this->view->form = $form;
$this->_helper->redirector('index', $pageName);
}
}
フォームが検証されないことを除いて、このフォームに入力すると、すべてが正常に機能し、メールが失われます。たとえば、メールは必須フィールドである「FullName」なしで送信される場合があります
別の問題では、「ありがとう」などのメッセージを表示できません。
これは、私が使用した$ this-> _helper->redirectorメソッドが原因である可能性があります。フォームがリダイレクトされるため、値が失われます。私が使用し$this->_helper->forwarded
たり、$this_forward()
それも機能しない場合。
検証メッセージやその他のメッセージを適切にディップする方法を提案していただけますか?英語が下手でごめんなさい、そして事前に感謝します