질문/조언질답게시판
Extra Form
PHP PHP 7.3
CMS Rhymix

모듈을 제작하던 도중에 컨트롤러에서 데이터를 redirecturl로 넘겨주고 싶습니다

 

기존에는 

return new BaseObject(0, '성공!');

 

이런식으로 메세지를 넘겨줬었는데, 성공했을때랑 실패했을때 같이 좀 다양화를  Context::set('message','내용'); 이런 식으로 넘겨주려고 했습니다.

 

그런데, 아래처럼 썼는데 안되더라고요

Context::set('VAILD_MESSAGE', '성공!');
Context::set('데이터_2', '내용2');
Context::set('데이터_3', '내용3');
$this->setRedirectUrl(getNotEncodedUrl('','mid','미드명','act','disp~~~Index'));

 

코어 구조는 잘 모르지만 저게 그냥 헤더같은걸로 url만 리다이렉트 시키는거 같아서요

그래서 context 내용은 안가는거 같은데, 이걸 넘겨줄수 있는 방법이 있을까요?

 

BaseObject로만 넘기기는좀 부족한거 같습니다..

  • profile

    세션을 이용해보세요 구글에 php세션. 검색해보시면 되요

     

    단쓰고난다음 unset해주세요

  • profile profile
    이왕이면 세션이 아니라 XE 기본 기능을 이용해서 만들고 싶어서요..

    구글이나 타운에 검색해봐도 Controller에서 View로 데이터를 넘기는 방법은 없고, 다들 View에서 처리하라고 하네요

    일단은 세션을 이용해서 구현을 해봐야 겠습니다
  • profile profile

    XE(및 기본 애드온/모듈 등)에서도 여기저기에서 $_SESSION을 그대로 사용하는 부분이 많으니 그냥 사용하셔도 됩니다.

  • profile profile

    controller 에서 view으로 넘어갈때 두개의 동작은 서로 다른 동작입니다.
    http://domain.com/ 에 POST 요청 1번.

    http://domain.com/index.php?act=dispModulenameView 에 get요청 2번

    Context::get, set요청은 하나의 메서드 ( ex, function disp~)혹은 한번의 요청에 그다음 요청시 모두 사라지는 데이터들입니다.

    따라서 XE자체에서 그렇게 넘기는 방법이 크게 없습니다.

    세션은 브라우저를 바꾸지않고 사이트의 연결을 끊지만 않는다면 계속 유지되기 때문에 바로 view에서 똑같은 키값으로만 호출잘해주면 상관없어요.

    그래서 쓰라고 하는겁니다..

     

    ajax으로 넘기는 데이터라도 모든 데이터는 다시 요청시 또 삭제되는 데이터고, 디비에 저장하지않는이상 그냥 값들만 넘기기엔 무리입니다.

     

  • profile profile
    다른 모듈을 봐도 세션을 사용한것 같지가 않아서 세션을 사용하지 않았었는데, 세션을 사용하기도 하나보네요

    그렇다면 안심하고 사용하겠습니다! ㅎㅎ
  • profile profile
    역시 기본 구조를 모르면 헤매게 되네요 ㅎㅎ

    혹시 질문이 있는데요, 기본 모듈들을 보니 BaseObject::add 혹은 $this->add로도 뭔가 값을 넘기는게 보이던데, 이건 Context::set이랑 다른것 같더라고요
    Context class랑 Object class에 따로 선언되있던데 사용하는 방식이나 위치도 다른건가요?
  • profile profile
    $this->add 으로 추가하는 것은 해당 데이터를 ajax으로 요청시에 많이들 사용합니다.

    그래서 json으로 인코딩 시킨다음 ajax를 요청하죠, 그럴때 javascript 에서 데이터를 받아 json 을 디코딩한다음에 데이터들을 활용합니다.

    이는 view 리버스님께서 직접 controller에서 액션이 되었던 요청을 ajax으로 호출하는 방식은 형편상 맞지 않는 방법으로 보여집니다. (구현자체가 이상해집니다. 이러면 플랑켄슈타인 모듈이 생성되죠 ㅎㅎ)

    그냥 세션 이용하시는게 제일 깔끔해요 ㅎㅎ
  • profile
    컨트롤을 어디서 호출 하셨는지?
    ajax로 호출해서 json 방식으로 넘겨 주는게 좋더군요.
  • profile profile

    컨트롤을 호출한 위치는 어떤식으로 설명을 드려야 할까요 ㅎㅎ;;

    뷰에서 form으로 컨트롤러에 데이터를 넘겨주고, 컨트롤러에서 DB 처리후 그 데이터를 인덱스 뷰로 넘겨주려고 했습니다

     

    또 조언해주신대로 ajax 에서도 만들어 보려고 exec_json 사용 해봤는데 RangeError: Maximum call stack size exceeded 이런 오류가 떠서 포기 했습니다 ㅋㅋ

    일단 세션으로 해결 봤습니다!