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 гораздо менее разрушена.

Другие вопросы по тегам