在CFWheels中使用flash()
非常简单,但我需要插入的不仅仅是一条简单的消息。如果我执行了3次flashInsert()
次调用,则只有最后一次调用会显示在flash()
的输出中。
作为一种解决方法,我想出了这个:
public void function index() {
local.messages = [];
arrayAppend(local.messages, { message="Test message 1.", type="ok" } );
arrayAppend(local.messages, { message="Test message 2.", type="ok" } );
arrayAppend(local.messages, { message="Test message 3.", type="ok" } );
flashInsert( local.messages );
WriteDump(var=flash(), abort=true);
}
这样,我就可以将flash()作为一个数组循环到它的对象中......访问消息并在每个上键入key。
但是,你知道吗?这感觉很脏!并且,对于我需要它的每一个动作重复这一点似乎我打破了这个神圣的DRY原则。
我已经看过尽可能多的关于闪光灯的相关功能,但似乎没有什么能够实现这一输出。
我还有一个好处,就是在这个消息对象中指定尽可能多的键...这很好,因为它可以帮助输出HTML。
我很感激你对此的看法......
米奇。
答案 0 :(得分:0)
flash是一个结构,而不是一个数组。所以,如果你这样做......
flashInsert(message="Hi!");
flashInsert(message="Bye!");
...然后,Flash结构中的message
键将被第二次flashInsert
调用覆盖。
如果您需要多个Flash消息,最明显的解决方案是使用不同的密钥名称。
他们是否都需要共享相同的密钥名称(在这种情况下为message
)?
答案 1 :(得分:0)
我从来没有找到任何内置的东西去做我想要的东西,但我推出了自己的解决方案。
不确定这里是否存在潜在问题,但似乎效果很好。很高兴得到人们对这样做的意见。
<强> Controller.cfc 强>
component extends="Wheels" output="false" {
messages = [];
public any function init() { }
public void function addMessage(object) {
arrayAppend(messages, arguments.object);
}
public void function insertMessages() {
local.messages = messages;
flashInsert( messages = local.messages );
return;
}
}
<强> User.cfc 强>
component extends="Controller" output="false" {
public void function index() {
super.addMessage({ message="Example message 1.", type="ok" });
super.addMessage({ message="Example message 2.", type="info" });
super.addMessage({ message="Example message 3.", type="error" });
super.insertMessages();
}
}
查看(循环闪光灯)
<cfset variables.flash = flash() />
<cfif not structIsEmpty(variables.flash)>
<div id="messages">
<cfoutput>
<cfloop array="#variables.flash.messages#" index="variables.i">
<p class="alert alert-#variables.i.type#">
#variables.i.message#
</p>
</cfloop>
</cfoutput>
</div>
</cfif>
有什么想法用这种技术做到这一点?
:)