2016-02-22 5 views
0

Я получаю следующее сообщение об ошибке в моем ZF2 FlashMessenger:вызов функции члена ToArray() на массиве в FlashMessenger

вызов функции члена ToArray() на массиве в/поставщика/ZendFramework/Зенд-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» - репо - проблемы ничего не говорят об этом.

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

ответ

1

Смотреть это в ZF2 (Best обычаях):

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

Есть 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'); 
} 

В Посмотреть (.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')); 

Просмотр, при использовании 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')); 

Now «са хак, если вы хотите, чтобы просмотреть FlashMessages на экране без resquest НУ перенаправлением (Идеально для ошибок формы, которые вы делаете не переадресовывает или 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, 
    )); 
    } 

} 

Если вы хотите углубить лучше на него, следуйте ссылкам Official ZEND 2 документации, дает примерил доступных методов, поможет много:

VIEW ->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

+0

Привет, Райдер, я не вижу различия в моем коде? Ваш код ниже ** В представлении, если используется Bootstrap: ** именно то, что я делаю с моим FlashMessageHelper. Этот Помощник является частью многих личных проектов и в первый раз, когда эта ошибка произошла. – michga93

Смежные вопросы