PHP маршрутизация: отображать флеш-сообщения в View (Klein)
Я использую Klein PHP маршрутизации для простого приложения
документация подходит для использования библиотеки, однако она не очень хороша для реализации представлений
например, я хочу отобразить флэш-сообщение об успехе / ошибке / предупреждении и т. д.
я понимаю, как Klein может хранить вспышку, как это сообщение об ошибке в документации
$klein->respond(function ($request, $response, $service, $app) use ($klein) {
// Handle exceptions => flash the message and redirect to the referrer
$klein->onError(function ($klein, $err_msg) {
$klein->service()->flash($err_msg);
$klein->service()->back();
});
так что для моего сообщения об успехе я сделал это
$service->flash("Success", $type = 'success' );
но кроме foreach на $_SESSION __flash, я не могу понять, как реализовать это на мой взгляд
я, конечно, думаю, что есть render() или что-то, чего мне не хватает... иначе я имею в виду, зачем вызывать все это, когда я могу просто сохранить свое собственное сообщение в сеансе, для меня это не имеет большого смысла
в любом случае, любая помощь всегда ценится
1 ответ
Если вы посмотрите документы для последней версии, есть метод Klein\ServiceProvider::flashes()
:
http://chriso.github.io/klein.php/docs/classes/Klein.ServiceProvider.html
Документы говорят, что он извлекает и очищает все флэш-сообщения или все флэш-сообщения данного типа.
Это не следует путать с Klein\ServiceProvider::flash()
, который добавляет флэш-сообщение:
http://chriso.github.io/klein.php/docs/classes/Klein.ServiceProvider.html
Вот источник:
https://github.com/chriso/klein.php/blob/master/src/Klein/ServiceProvider.php
Похоже, что он возвращает массив вспышек, сгруппированных по типу, так что вы можете предвидеть и повторять их. Если вы используете систему шаблонов Klein (в вашем случае вы бы отрисовали шаблон с $klein->service->render($myTemplateName))
затем вы можете вызвать ServiceProvider из шаблона как $ this.
Таким образом, в вашем шаблоне у вас будет что-то вроде:
<? foreach($this->flashes() as $type=>$messages): ?>
<? foreach($messages as $msg): ?>
<div class="alert alert-<?= $type ?>"><?= $msg ?></div>
<? endforeach; ?>
<? endforeach; ?>
Очевидно, вам не нужно использовать синтаксис альтернативной структуры управления, но мне нравится использовать его в моих шаблонах. Это было частью стандарта кодирования в магазине разработчиков, где я работал, и я принял его как свой собственный.
Просто один на один. Документы, похоже, представляют код в dev-master, а не ветку 2.0.x, которую они советуют использовать на странице GitHub. Кажется, с тех пор много кода было перемещено (по крайней мере, мы знаем, что он не заброшен, верно?). Я обнаружил, что ветка dev-master гораздо менее разрушена.