Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php flashmessenger没有';不显示新消息_Php_Zend Framework2_Flashmessenger - Fatal编程技术网

Php flashmessenger没有';不显示新消息

Php flashmessenger没有';不显示新消息,php,zend-framework2,flashmessenger,Php,Zend Framework2,Flashmessenger,我在Zend Framework 2.2.0中使用FlashMessenger将消息从一个动作传递到另一个动作 我有一个联系我们的表单,在它被执行后,我会发送一封电子邮件并将用户转发到主页 public function contactUsExecuteAction() { $request = $this->getRequest(); if ($request->isPost()) { $contactUs = new ContactUs();

我在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');
        }

    }
  } 
公共功能联系人UseExecuteAction(){
$request=$this->getRequest();
如果($request->isPost()){
$contactUs=新contactUs();
$form=新联系人usform();
$form->setInputFilter($contactUs->getInputFilter());
$form->setData($request->getPost());
如果($form->isValid()){
$contactUs->exchangearlay($form->getData());
$name=$contactUs->name;
$email=$contactUs->email;
$message=$contactUs->message;
$completeMessage='name:'.$name.'\n'.'email:'.$email.\n'.$message;
$subject='我的酗酒者联系我们';
邮件(“”,$subject,$completeMessage);
$this->flashMessenger()->addMessage(“感谢您联系我的酗酒者”);
返回$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 ?>

1)

不要使用forward,不会有新的请求

尝试使用重定向,这样您将得到一个新的请求,并会发现等待您的消息,您不需要任何额外的代码来让它工作

$this->redirect()->toRoute('routeName');

2)

如果您决定在这样的视图中使用它,那么您总是可以制作一个简单的 查看帮助程序:

namespace Application\View\Helper;

use Zend\Mvc\Controller\Plugin\FlashMessenger as ZendFlash;
use Zend\View\Helper\AbstractHelper;

class FlashMessenger extends AbstractHelper
{
    /**
     * @var \Zend\Mvc\Controller\Plugin\FlashMessenger
     */
    protected $flashMessenger;
    /**
     * @var array
     */
    protected $namespaces = array(
        'default',
        'error', 
        'success',
        'info', 
        'warning'
    );

    /**
     * Set the Controller plugin
     * 
     * @param   Zend\Mvc\Controller\Plugin\FlashMessenger
     */
    public function setFlashMessenger($flashMessenger)
    {
        $this->flashMessenger = $flashMessenger;

        return $this;
    }

    /**
     * @return  string
     */
    public function __invoke()
    {
        $messageString = '';            
        foreach($this->namespaces as $ns) {
            $this->flashMessenger->setNamespace($ns);
            $messages = $this->flashMessenger->getMessages();
            if($this->flashMessenger->hasCurrentMessages()) {
                $messages += $this->flashMessenger->getCurrentMessages();
                $this->flashMessenger->clearCurrentMessages();
            }

            if(count($messages) > 0) {
                // Twitter bootstrap message box
                $messageString .= sprintf(
                    '<div class="container-fluid">
                        <div class="alert alert-%s fade in">
                            <button data-dismiss="alert" class="close" type="button">×</button>
                            %s
                        </div>
                    </div>',
                    $ns,
                    implode('<br />', $messages)
                );
            }
        }

        return $messageString;
    }
}
现在,您可以更好地在视图中使用视图辅助对象:

示例.phtml

<?php echo $this->flashMessenger() ?>

1)

不要使用forward,不会有新的请求

尝试使用重定向,这样您将得到一个新的请求,并会发现等待您的消息,您不需要任何额外的代码来让它工作

$this->redirect()->toRoute('routeName');

2)

如果您决定在这样的视图中使用它,那么您总是可以制作一个简单的 查看帮助程序:

namespace Application\View\Helper;

use Zend\Mvc\Controller\Plugin\FlashMessenger as ZendFlash;
use Zend\View\Helper\AbstractHelper;

class FlashMessenger extends AbstractHelper
{
    /**
     * @var \Zend\Mvc\Controller\Plugin\FlashMessenger
     */
    protected $flashMessenger;
    /**
     * @var array
     */
    protected $namespaces = array(
        'default',
        'error', 
        'success',
        'info', 
        'warning'
    );

    /**
     * Set the Controller plugin
     * 
     * @param   Zend\Mvc\Controller\Plugin\FlashMessenger
     */
    public function setFlashMessenger($flashMessenger)
    {
        $this->flashMessenger = $flashMessenger;

        return $this;
    }

    /**
     * @return  string
     */
    public function __invoke()
    {
        $messageString = '';            
        foreach($this->namespaces as $ns) {
            $this->flashMessenger->setNamespace($ns);
            $messages = $this->flashMessenger->getMessages();
            if($this->flashMessenger->hasCurrentMessages()) {
                $messages += $this->flashMessenger->getCurrentMessages();
                $this->flashMessenger->clearCurrentMessages();
            }

            if(count($messages) > 0) {
                // Twitter bootstrap message box
                $messageString .= sprintf(
                    '<div class="container-fluid">
                        <div class="alert alert-%s fade in">
                            <button data-dismiss="alert" class="close" type="button">×</button>
                            %s
                        </div>
                    </div>',
                    $ns,
                    implode('<br />', $messages)
                );
            }
        }

        return $messageString;
    }
}
现在,您可以更好地在视图中使用视图辅助对象:

示例.phtml

<?php echo $this->flashMessenger() ?>


我也在考虑这个问题,但是不应该
getCurrentMessages()
返回当前请求中的消息吗?是的,我修改了我的flash messenger,让它做他想做的事情,但最简单的方法是重定向,这也会阻止任何双重提交,非常有用。谢谢我也在考虑这个问题,但是不应该
getCurrentMessages()
返回当前请求中的消息吗?是的,我修改了我的flash messenger,让它做他想做的事情,但最简单的方法是重定向,这也会阻止任何双重提交,非常有用。谢谢可能是由于您在布局中使用控制器插件的方式导致的问题。。?在这种情况下,最好创建一个视图帮助器..可能是因为您在布局中使用控制器插件的方式导致了问题。。?在这种情况下,最好创建一个视图帮助器。。