2013-07-24 2 views
0

Использование flash() в CFWheels довольно прямолинейно, но я нахожусь в точке, где мне нужно вставить больше, чем просто одно сообщение. Если я сделаю 3 flashInsert() звонки, только последний будет отображаться на выходе flash().Лучший способ использовать flash() в CFWheels?

В работе вокруг, я пришел с этим:

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

    } 

Таким образом, я могу затем цикл вспышки() в виде массива в его объекте ... доступа сообщение и тип ключа на каждый.

Но знаешь что? Это кажется грязным! И, повторяя это для каждого действия, в котором я нуждаюсь, похоже, что я нарушаю этот священный принцип СУХОЙ.

Я рассмотрел как можно больше связанных функций, связанных со вспышкой, но ничего похожего на этот вывод не наблюдается.

У меня также есть преимущество указывать столько ключей, сколько я хочу в этом объекте сообщения ... что приятно, так как это может помочь с выходом HTML.

Я ценю ваши мысли по этому ...

Мики.

ответ

0

Вспышка - это структура, а не массив. Так что, если вы сделаете это ...

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

... то message ключ в флэш-структуры собирается получить перезаписаны 2 flashInsert вызова.

Наиболее очевидным решением было бы использовать разные имена ключей, если вам нужно несколько флеш-сообщений.

Есть ли причина, по которой все они должны иметь одно и то же имя ключа (message в этом случае)?

+0

Вспышки отлично подходит для основного обмена сообщений, но с более сложным контроллером, который выстреливает несколько вещей, на основе пользовательского ввода, было бы неплохо иметь несколько сообщений, динамически размещаемые. Я бы тогда просто будьте в состоянии зацикливать сообщения. У меня есть обход, который я выложу выше ... но он все еще чувствует себя немного «грязным».В моем цикле я не хочу угадывать имена ключей, я просто хочу его зациклить и оставить. –

+0

Я только что представил свой собственный ответ - посмотри и посмотри, что ты думаешь ?! –

+1

'flashMessages' делает то, что вы ищете. Вы изучили это? http://cfwheels.org/docs/1-1/function/flashmessages Обратите внимание, что первый аргумент является необязательным. –

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

     } 

} 

View (петли вспышки)

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

ИН ea на этом делает это с помощью этой техники?

:)

Смежные вопросы