Вызов функции-члена toArray() для массива в FlashMessenger

Я получаю следующую ошибку в моем ZF2 FlashMessenger:

Вызов функции-члена toArray() для массива в /vendor/zendframework/zend-mvc/src/Controller/Plugin/FlashMessenger.php в строке 306

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" - repo - ничего не говорят об этом.

Спасибо за внимание!


person michga93    schedule 22.02.2016    source источник


Ответы (1)


См. это в ZF2 (лучшие практики):

Плагин FlashMessenger отправляет ваше сообщение в пул ожидания (через плагин FlashMessenger Zend MVC), который будет отображаться при запросе другой страницы (через ViewHelper). Флэшмессенджер).

Существует 4 типа сообщений, которые можно интегрировать с уведомлениями Bootstrap (ошибка, информация, по умолчанию, успех).

Теперь давайте потренируемся

В разделе Действие в Контроллере вы должны ввести свое сообщение и свой бренд:

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

В View (.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'));

В View при использовании Bootstrap:

 $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

person Ríder Cantuária    schedule 23.02.2016
comment
Привет Райдер, я не вижу разницы с моим кодом? Ваш код ниже In View, если используется Bootstrap: — это именно то, что я делаю с моим FlashMessageHelper. Этот помощник является частью многих личных проектов, и эта ошибка возникла впервые. - person michga93; 23.02.2016