0

ZF2 FlashMessenger で次のエラーが発生します。

/vendor/zendframework/zend-mvc/src/Controller/Plugin/FlashMessenger.php の 306 行目の配列でメンバー関数 toArray() を呼び出します。

FlashMessages は私の FlashMessageHelper によってレンダリングされます:

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;
use Zend\View\Helper\FlashMessenger;

class FlashMessageHelper extends AbstractHelper {

  public function __invoke(FlashMessenger $flashMessenger) {

    $flashMessenger->setMessageOpenFormat('<div%s><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button><p class="text-center">');

    $flashMessenger->setMessageSeparatorString('</p><p class="text-center">');

    $flashMessenger->setMessageCloseString('</p></div>');

    $flashMessenger->setAutoEscape(false);

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

誰もこのエラーについて知っていますか? このエラーが発生したのは初めてです。Google と "zend-mvc" - レポ - の問題は、これについて何も述べていません。

ご清聴ありがとうございました!

4

1 に答える 1

1

ZF2(ベストプラクティス)でこれを参照してください:

プラグイン 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 を行わないフォーム エラーに最適)、この手法を使用します。

public function registerAction(){
      if($formValid){
          $this->flashMessenger()->addSucessMessage('Saved!');
      } else{
          #add to pool
          $this->flashMessenger()->addErrorMessage('Fail');
          #merge message
          $feedback = array_merge(
             $this->flashMessenger->getErrorMessages(),
             $this->flashMessenger->getCurrentErrorMessages()
          );
          #clear pool
          $this->clearCurrentErrorMessages();

      }

      #message in variable to VIEW
      new ViewModel(array(
        'feedback' => $feedback,
      ));
    }

}

それをさらに深めたい場合は、公式の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-23T01:51:00.073 に答える