0

Zend Framework 2.2.0 で flashMessenger を使用して、あるアクションから別のアクションにメッセージを配信しています。

お問い合わせフォームがあり、実行後にメールを送信してユーザーをホームページに転送します。

public function contactUsExecuteAction() {
    $request = $this->getRequest();
    if ($request->isPost()) {
        $contactUs = new ContactUs();
        $form = new ContactUsForm();
        $form->setInputFilter($contactUs->getInputFilter());
        $form->setData($request->getPost());
        if ($form->isValid()) {
            $contactUs->exchangeArray($form->getData());
            $name = $contactUs->name;
            $email = $contactUs->email;
            $message = $contactUs->message;
            $completeMessage='name:'.$name."\n".'email:'.$email."\n".$message;
            $subject = 'myalcoholist contact us';
            mail('<EMAIL_ADDRESSS>',$subject,$completeMessage);
            $this->flashMessenger()->addMessage("thank you for contacting myalcoholist.");

            return $this->forward()->dispatch('home');
        }

    }
  } 

これで、forward はページを転送するだけであり、getCurrentMessages を使用しない限り、次の反復でのみメッセージを取得することになっていることがわかりました。これは私のlayout.phtmlにあります

<?php 
 use Zend\Mvc\Controller\Plugin\FlashMessenger;

 $messenger = $this->flashMessenger()->getPluginFlashMessenger();
 foreach(array(
    FlashMessenger::NAMESPACE_ERROR,
    FlashMessenger::NAMESPACE_SUCCESS,
    FlashMessenger::NAMESPACE_INFO,
    FlashMessenger::NAMESPACE_DEFAULT)
    as $namespace):

$messenger->setNamespace($namespace);
$userMsgs = array_merge($messenger->getCurrentMessages(), $messenger->getMessages());
$messenger->clearCurrentMessages();

foreach($userMsgs as $msg):
    $msgText = $msg;
    if (is_array($msg)){
        $msgText = $msg['message'];
    }
    ?>
    <div class="alert alert-<?=$namespace?>">
        <?=$msgText?>
    </div>
 <?php endforeach ?>
<?php endforeach ?>

しかし、何らかの理由でメッセージが届きません!ユーザーを適切に転送しますが、それだけです。

何か案は ?

4

1 に答える 1