在CFWheels中使用flash()的更好方法是什么?

时间:2013-07-24 15:52:24

标签: coldfusion cfml cfwheels

在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。

我很感激你对此的看法......

米奇。

2 个答案:

答案 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>

有什么想法用这种技术做到这一点?

:)