我想知道是否有任何正确的方法将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 »",
"link_url" => array(
"controller" => "shops",
"action" => "manage",
"admin" => true
)
));
答案 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。