PHP路由:在View(Klein)中显示flash消息


PHP routing: display flash messages in View (Klein)

我正在为一个简单的应用使用Klein-php路由

文档可以使用库,但是它不擅长如何实现视图

例如,我想在成功/错误/警告等上显示一条闪烁消息

我理解klein如何在文档中存储类似此错误消息的flash

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

但是除了$_SESSION__flash上的foreach之外,我看不出如何在我的视图中实现它

我肯定认为有一个render()或我缺少的东西。。。我的意思是,当我可以在一个会话中存储我自己的消息时,为什么要调用这一切,这对我来说没有多大意义

不管怎样,任何帮助都是值得赞赏的

如果你查看最新版本的文档,有一个方法Klein'ServiceProvider::flashes():

http://chriso.github.io/klein.php/docs/classes/Klein.ServiceProvider.html#method_flashes

文档表示,它会检索并清除所有的flash消息,或者指定类型的所有flash消息。

不要将其与Klein'ServiceProvider::flash()混淆,后者添加了一条闪烁消息:

http://chriso.github.io/klein.php/docs/classes/Klein.ServiceProvider.html#method_flashes

来源:

https://github.com/chriso/klein.php/blob/master/src/Klein/ServiceProvider.php#L179

它看起来像是返回了一组按类型分组的闪光,所以你可以预先处理并回声它们。如果您使用的是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中的代码,而不是他们告诉你在GitHub页面上使用的2.0.x分支。从那以后,很多代码似乎都被移动了(至少我们知道它没有被放弃,对吧?)。我发现开发主分支的故障要小得多。