CakePHP:setFlash()中的HTML

时间:2011-07-02 10:55:07

标签: php cakephp

我想知道是否有任何正确的方法将HTML包含在Session组件的setFlash()函数中。

基本上我在电子商务网站上有这个管理界面,允许管理员创建和编辑网站上的“商店”。保存“商店”后,我希望CakePHP显示“您的商店已成功保存。返回商店索引”。 “返回商店索引”将是一个链接。我目前正在使用普通的旧HTML:

$this->Session->setFlash("Shop has been successfully published. <a href=\"...\">Return to Shop Index</a>");

可以,但它是Controller中的HTML,我认为这是一个“坏事”。

谢谢!

编辑:

感谢@YonoRan提供解决方案。错过了CakePHP文档中的内容。这是我做的:

1)在session_flash_link.ctp中创建了新元素app/views/elements

2)在session_flash_link.ctp中添加了以下代码:

<div id="flashMessage" class="message">
<?php
echo $message;
echo $this->Html->link($link_text, $link_url, array("escape" => false));
?>
</div>

3)控制器中的代码:

$this->Session->setFlash("Shop has been successfully saved. ", "session_flash_link", array(
    "link_text" => "Return to Shop Management &raquo;",
    "link_url" => array(
        "controller" => "shops",
        "action" => "manage",
        "admin" => true
    )
));

2 个答案:

答案 0 :(得分:5)

这可能是您尝试执行的操作的解决方案,它将“Layout”加载为其中的所有HTML作为setFlash消息。 Custom CakePHP flash message

更新

我刚刚查看了手册中的setFlash SetFlash Manual

它表明你可以指定和包含setFlash消息的HTML的元素+一堆其他属性。

setFlash($message, $element = 'default', $params = array(), $key = 'flash')

因此,在我发布的第一个链接中建议,这似乎是一种更好的方法,因为它不需要新的布局,只是使用了元素。

祝你好运。

答案 1 :(得分:1)

我刚刚找到了另一种不需要新特定模板的方法:

您可以使用HtmlHelper - 您可以访问它,因为它可能已加载到视图中,我们可以访问它:

// access the html helper
$Html = (new View($this))->loadHelper('Html');
// use it to generate a link    
$resend = $Html->link(__('resend'), array(
    'controller' => 'users',
    'action' => 'resend',
));
// sprintf to insert the link to your standard message text!
$this->Session->setFlash(sprintf(_("Do you want to %s the email?"), $resend));

在视图中需要帮助程序功能的任何情况下都可以使用。适用于2.3.5。