2

method_1() を持つコントローラーがあります。このメソッドでは、method_2() を呼び出します。method_2() には (try... catch) があります - 定義された flashMesseges とリダイレクトでブロックします。

$this->flashMessenger()->addErrorMessage("There are errors.");
return $this->redirect()->toRoute('home');

しかし、うまくいきません。しかし、私が次のように書くと

$this->redirect()->toRoute('home');
$this->flashMessenger()->addErrorMessage("There are errors.");

大丈夫。method_1() コード内

$this->flashMessenger()->addErrorMessage("There are errors.");
return $this->redirect()->toRoute('home');

よくやった。理解できない。誰でも私を助けることができますか?

クラス A - リダイレクトが機能しない。そして、セッションにメッセージを追加します。

class A {
  public function manageAction()
  {
      $view = new ViewModel();

      $form = $this->getForm();
      $form = $this->fillForm($form);

      $view->form = $form;
      return $view;
  }

  public function fillForm($form)
  {
      try {
          // ...
      } catch (\Exception $e) {
          $this->flashMessenger()->addErrorMessage("Error");
          return $this->redirect()->toRoute('home');
      }
      return $form;
  }
}

クラス B - リダイレクトが機能しています。そしてメッセージプリント。

class B {
  public function manageAction()
  {
      $view = new ViewModel();

      $form = $this->getForm();
      $form = $this->fillForm($form);

      $view->form = $form;
      return $view;
  }

  public function fillForm($form)
  {
      try {
          // ...
      } catch (\Exception $e) {
          $this->redirect()->toRoute('home');
          $this->flashMessenger()->addErrorMessage("Error");
      }
      return $form;
  }
}

なぜ、どのように機能するのですか?

4

2 に答える 2

1

プラグイン FlashMessengerは、 ( FlashMessenger Zend MVCプラグインを介して) 待機プールにメッセージを送信し、別のページ要求 (ViewHelper FlashMessenger を介して) に表示されます

ブートストラップ通知と統合できるメッセージには 4 つのタイプがあります(エラー、情報、デフォルト、成功)。

では、練習しましょう

Controller内のActionでは、メッセージとブランドを入力する必要があります。

use Zend\Mvc\Controller\Plugin\FlashMessenger;

public function registerAction(){
  if($formValid){
      $this->flashMessenger()->addSucessMessage('Saved!');
  } else{
      $this->flashMessenger()->addErrorMessage('Fail!');
  }

  //redirect to other route and show message
  return $this->redirect()->toRoute('app');
}

ビュー(.phtml) では、以下を使用するだけです。

#show messages of addErrorMessage();
echo $flash->render('error',   array('alert', 'alert-dismissible', 'alert-danger'));
#show messages of addInfoMessage();
echo $flash->render('info',    array('alert', 'alert-dismissible', 'alert-info'));
#show messages of addMessage();
echo $flash->render('default', array('alert', 'alert-dismissible', 'alert-warning'));
#show messages of addSucessMessage();
echo $flash->render('success', array('alert', 'alert-dismissible', 'alert-success'));

ViewBootstrapを使用している場合:

 $flash = $this->flashMessenger();
 $flash->setMessageOpenFormat('<div>
     <button type="button" class="close" data-dismiss="alert" aria-hidden="true">
         &times;
     </button>
     <ul><li>')
     ->setMessageSeparatorString('</li><li>')
     ->setMessageCloseString('</li></ul></div>');


 echo $flash->render('error',   array('alert', 'alert-dismissible', 'alert-danger'));
 echo $flash->render('info',    array('alert', 'alert-dismissible', 'alert-info'));
 echo $flash->render('default', array('alert', 'alert-dismissible', 'alert-warning'));
 echo $flash->render('success', array('alert', 'alert-dismissible', 'alert-success'));

リダイレクト ページを要求せずに画面にFlashMessagesを表示したい場合(別のページにリダイレクトまたは AJAX を行わないフォーム エラーに最適)、renderCurrent と clear を使用します。

echo $flash->renderCurrent('error', array('alert', 'alert-dismissible', 'alert-danger'));

より深く学びたい場合は、公式の Zend 2 ドキュメント のリンクをたどってください。

ビュー-> http://framework.zend.com/manual/current/en/modules/zend.view.helpers.flash-messenger.html

コントローラ-> http://framework.zend.com/manual/current/en/modules/zend.mvc.plugins.html#zend-mvc-controller-plugins-flashmessenger

于 2016-02-22T02:42:16.040 に答える