2013-07-24 3 views
0

CFWheels에서 flash()을 사용하는 것은 간단 합니다만, 단순한 하나 이상의 메시지를 삽입해야하는 시점에 있습니다. 3 flashInsert() 전화를 걸면 마지막 하나만 flash()의 출력에 표시됩니다. A와 CFWheels에서 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); 

    } 

이 방법은, 내가 할 수있는 다음 루프는 객체의 배열로 플래시() ...에 액세스하는 메시지를 입력 키의에 마다.

하지만 아시죠? 이것은 더러운 느낌! 그리고 내가 이것을 필요로하는 모든 행동에 대해 반복하는 것은이 거룩한 DRY 원리를 깨고있는 것처럼 보입니다.

나는 플래시에 관해서 내가 할 수있는 많은 관련 기능을 살펴 봤지만,이 출력을 얻는 것은 아무것도 없다.

나는이 메시지 객체에서 원하는만큼의 키를 지정하는 것이 유익합니다 ... 출력 HTML에 도움이 될 수있어서 좋았습니다.

이 질문에 감사드립니다.

Mikey.

답변

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

     } 

} 

보기

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

모든 ID (플래시 루프) 이 기법으로이 작업을 수행하고 있습니까?

: