2011-07-02 30 views
2

我不知道是否有包括在会话组件的setFlash()函数HTML任何适当方式。CakePHP的:HTML中setFlash()

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

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

工程,但它是控制器中的HTML,我认为这是一个“坏事”。

谢谢!

编辑:

感谢@YonoRan的解决方案。错过了CakePHP文档。下面是我所做的:

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

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

回答

5

这可能是你正在尝试做一个解决方案,它加载了“布局“,将其中的所有HTML作为setFlash消息。 Custom CakePHP flash message

更新:

我只是检查了手册setFlash SetFlash Manual

它表明您可以指定并保存为setFlash消息+一堆其他属性的HTML元素。

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

所以看起来像是在做什么在我张贴的第一个链接的建议,因为它并不需要一个新的布局更好的办法,但只是使用元素。

祝你好运。

+0

谢谢!你的第二个解决方案对我来说效果很好。我为链接的所有Flash消息创建了一个名为session_flash_link.ctp的新元素。 – yjwong

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。

+0

但是你不觉得在控制器中使用助手不是一个好主意 –

+0

从学术的角度来看,你是对的。无论如何,两年前它是有意义的,不管如何,标记的答案是更好的答案! –