我正在尝试使用一个库来显示Flash Messages
https://github.com/elpete/flashmessage但我无法让它正常工作。文档不是很好,我是 ColdFusion 的新手。我希望能够在页面之间保持持久的错误消息。特别是在结帐期间,因此当用户需要返回或发生验证错误时,将显示该消息。根据文档:
FlashMessage.cfc 需要三个参数才能工作:
对您的闪存存储对象的引用。该对象将需要 get(key) 和 put(key, value) 方法。具有以下属性的配置对象: 一个唯一的 flashKey 名称,以避免命名冲突。对您的 containerTemplatePath 的引用。这是围绕每个单独消息的视图。它将引用 flashMessages 数组和您的 messageTemplatePath。对您的 messageTemplatePath 的引用。这是在 FlashMessage 中表示单个消息的视图。它将引用单个 Flash 消息。该名称由您在容器模板中选择。使用您的两个参数创建您的对象,然后正常使用它。
我收到错误
the function getMessages has an invalid return value , can't cast null value to value of type [array]
我让这个脚本在某个时候有点工作,但它看起来非常挑剔。我相信这是我的实现。我希望这里有人可以帮助我找出我哪里出错了。或者给我一些指示,因为我不确定我是否正确实施它。
这是我的测试脚本中的内容:
<cfscript>
alertStorage = createObject("component", 'alert');
config = {
flashKey = "myCustomFlashKey",
containerTemplatePath = "/flashmessage/views/_templates/FlashMessageContainer.cfm",
messageTemplatePath = "/flashmessage/views/_templates/FlashMessage.cfm"
};
flash = new flashmessage.models.FlashMessage(alertStorage, config);
flash.message('blah');
flash.danger('boom');
</cfscript>
在 alert.cfc 我有:
component {
public any function get(key) {
for(var i = 1; i < ArrayLen(session[key]); i++) {
return session[key][i];
}
}
public any function put(key, value) {
ArrayAppend(session.myCustomFlashKey, value);
return true;
}
public any function exists() {
if(structKeyExists(session,"myCustomFlashKey")) {
return true;
} else {
session.myCustomFlashKey = ArrayNew();
return false;
}
}
}
Flash 消息组件如下所示:
component name="FlashMessage" singleton {
/**
* @flashStorage.inject coldbox:flash
* @config.inject coldbox:setting:flashmessage
*/
public FlashMessage function init(any flashStorage, any config) {
instance.flashKey = arguments.config.flashKey;
singleton.flashStorage = arguments.flashStorage;
instance.containerTemplatePath = arguments.config.containerTemplatePath;
instance.messageTemplatePath = arguments.config.messageTemplatePath;
// Initialize our flash messages to an empty array if it hasn't ever been created
if (! singleton.flashStorage.exists(instance.flashKey)) {
setMessages([]);
}
return this;
}
public void function message(required string text, string type = "default") {
appendMessage({ message: arguments.text, type = arguments.type });
}
public any function onMissingMethod(required string methodName, required struct methodArgs) {
message(methodArgs[1], methodName);
}
public any function render() {
var flashMessages = getMessages();
var flashMessageTemplatePath = instance.messageTemplatePath;
savecontent variable="messagesHTML" {
include "#instance.containerTemplatePath#";
}
setMessages([]);
return messagesHTML;
}
public array function getMessages() {
return singleton.flashStorage.get(instance.flashKey, []);
}
private void function setMessages(required array messages) {
singleton.flashStorage.put(
name = instance.flashKey,
value = arguments.messages
);
}
private void function appendMessage(required struct message) {
var currentMessages = getMessages();
ArrayAppend(currentMessages, arguments.message);
setMessages(currentMessages);
}
}