0

在 CFWheels 中使用flash()非常简单,但我现在需要插入的不仅仅是一条简单的消息。如果我进行 3flashInsert()次调用,则只有最后一个会显示在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() 作为一个数组循环到它的对象中……访问消息并在每个对象上键入键。

但是,你知道吗?这感觉很脏!而且,对我需要的每一个动作都重复这个似乎我打破了这个神圣的 DRY 原则。

我已经尽可能多地查看了有关闪光灯的相关功能,但似乎没有任何东西可以实现此输出。

我还可以在此消息对象中指定任意数量的键……这很好,因为它可以帮助输出 HTML。

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

米奇。

4

2 回答 2

0

我从来没有找到任何内置的东西来做我想做的事,但我推出了自己的解决方案。

不确定这里是否存在潜在问题,但它似乎工作得很好。以这种方式获得人们的意见会很好。

控制器.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;

    } 

}

用户.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>

有什么想法可以用这种技术来做吗?

:)

于 2013-07-25T13:53:08.533 回答
0

The flash is a struct, not an array. So if you do this...

flashInsert(message="Hi!");
flashInsert(message="Bye!");

...then the message key in the flash struct is going to get overwritten by the 2nd flashInsert call.

The most obvious solution would be to use different key names if you need multiple flash messages.

Is there a reason why they'd all need to share the same key name (message in this case)?

于 2013-07-25T13:16:20.587 回答