2015-11-06 11 views
1

Так что я недавно решил конвертировать мое приложение Slim2 в новую 3-ей версию, многое из приложения пришлось изменить и т. Д.Slim 3 - обновленные флэш-сообщения, возвращающие два значения массива

Другое дело, что флеш-сообщения были удалены из основной структуры, поэтому я решил пойти и добавить их обратно с композитором, я понял, что они тоже изменились, и по какой-то причине я получаю массив с двумя значениями а не один.

$container['flash'] = function ($c) { 
    return new \Slim\Flash\Messages(); 
}; 

$this->app->flash->addMessage('error', 'hello'); 

$flash = $this->flash->getMessages(); 
print_r($flash); // returns Array ([error] => Array ([0] => hello [1] => hello)) 

Мой шаблон, очевидно, также жалуется на это слишком, так как это не правильный тип

Notice: Array to string conversion in cache\66\664fc695876aa16573ce7a84cfe29c998af42da36e69199f149219a4e821d44a.php on line 80 Array 

Как я в состоянии использовать флэш-сообщения точно так же Slim2 использовали их? Или я должен их использовать, есть ли лучшая альтернатива, способная выполнять ту же работу?

ответ

0

Глядя на source, звонок getMessages() возвращает массив. Если вы хотите только одно сообщение, вы можете использовать getMessage(). Например, getMessage("error").

+0

К сожалению, я уже попробовал эту функцию, и она по-прежнему дает мне тот же результат какой-то причине. Единственная разница в результате с этими двумя функциями заключается в том, что getMessage возвращает «[0] => привет [1] => привет», а не «[error] => привет [1] => привет». – Pepzter9

+0

В настоящее время используется временное решение: $ flash = $ this-> flash-> getMessage ('error') ['0']; пока не будет найдено лучшее решение. – Pepzter9

0

Для всех, кто попал в эту проблему: Slim возвращает вложенный массив, и вам нужно перебирать оба.

foreach ($messages as $singlemessage) { 
    foreach ($singlemessage as $m) { 
     print("<li>{$m}</li>"); 
    } 
} 

Это займет каждое сообщение, а затем распечатает каждое сообщение внутри него отдельно. Ошибка «Уведомление: преобразование массива в строку» буквально говорит вам, что вы пытаетесь напечатать массив как строку, и вы не можете.

0

Вам необходимо добавить $container['flash'] в ваш view например: twig. Если вы используете Twig, чтобы сделать просмотры затем добавить его, как так $view->getEnvironment()->addGlobal('flash', $container['flash']);

Тогда в просмотре {% flash.getMessage('error') %}

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

  • Нет связанных вопросов^_^