Extra Form
PHP PHP 7.2
CMS Rhymix 2.x

화면 캡처 2021-12-03 174932.png

 

 

비회원인 경우 설문참여 시도시 문구를 띄우고 중지 하도록 코드를 짰는데(다른 곳의 코드를 참조0 위와 같이 출력이 되는데요.

 

"로그인해야 참여할 수 있습니다." 라는 문구만 출력하려면 어떻게 해야 할까요?

 

이게  exec_json() 으로 요청한 것을 차단한 것이라 이런 문제가 발생하는건지 잘 모르겠습니다.

 

 

        header("Content-Type: text/xml; charset=UTF-8");
        header("Cache-Control: no-store, no-cache, must-revalidate");
        header("Cache-Control: post-check=0, pre-check=0", false);
        header("Pragma: no-cache");
        printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<response>\r\n<error>-1</error>\r\n<message>로그인해야 참여할 수 있습니다.</message>\r\n</response>");
        Context::close();
        exit();

 

이렇게 코드를 사용했습니다.

  • profile

    return new BaseObject(-1, "로그인사용자~~"); 으로는 안되는가요?

     

    아마 애드온에서는 $this->stop("Message"); 이런식으로 쓰던거같아요.

  • profile profile
    그렇게 하면 아마 스크립트 메시지가 아니고 시스템 메시지창이 발생했던거로 기억되서 시도는 안했습니다.
  • profile profile
    ajax요청으로 이루어진 것은 대부분 알럿으로 시스템메시지를 출력해줍니다.

    아니면

    throw new Rhymix\Framework\Exception('에러메세지');

    이걸 써두되고요.
  • profile profile
    아.... ajax 요청은 그렇게 해주는군요. 시도해 보겠습니다.
    $this->stop("Message"); 만 적어주니 그냥 설문참여가 바로 되어버리네요.
  • profile profile
    스탑이 안된다면 입셉션을 쓰는것이 아마 바로 멈추도록 해줄테니 시도해보셔요 ㅎㅎ
  • profile profile
    $this->act = 'true';
    $this->stop('로그인해야 참여할 수 있습니다.');

    요걸로 성공했습니다. 감사합니다.
    요게 ajax 요청일때 고려해할 부분을 오늘 또 하나 배워갑니다.
  • profile profile
    아래 yjsoft님이 달아주신 댓글이 좀 더 정확하겠습니다.

    act같은 정보는 조작하지 않는 것이 좋습니다.
  • profile
    $this->setError("로그인해야 참여할 수 있습니다.");

    error를 -1로, message값을 지정한 메세지(번역 id나 string 둘다 가능)로 설정합니다.
  • profile profile
    오.. 요것도 학습하겠습니다 감사합니다!!!
  • profile profile
    요 코드만 쓰니 그냥 통과해버리네요.
  • profile profile
    throw new Rhymix\Framework\Exception('에러메세지'); 요걸로 한번 테스트부탁드려용.
  • profile profile
    이건 서버오류가 발생하네요. 문법적 오류는 없을 것 같긴한데요. 제가 오타를 내거나 하지는 않았을 겁니다.
  • profile profile
    아그리고 위코드 쓸꺼면 아마 이런식이여야 할걸요?

    return $this->setError('msg_invalid_request');
  • profile profile
    요것도 메시지 안뜨고 바로 설문성공 메시지 떠버립니다.
  • profile profile
    나머지 안되는건 나중에 코어팀에서 한번 구현해서 알아볼께요..
  • profile

    에러를 뿜으시려는 위치를 정확히 말씀해 주셨다면 불필요한 제안을 줄일 수 있었을 것 같습니다. before_module_init인지 before_module_proc인지, moduleObject.proc 트리거인지에 따라 사용할 수 있는 변수나 함수가 달라지니까요.

     

    XE에서 물려받은 모듈 실행 구조상 before_module_proc 애드온 시점이 제일 애매합니다. 호환성을 유지하자니 애드온이 어색하게 되어 버리고, 그렇다고 호환성을 깨뜨릴 수도 없고...

  • profile profile
    이전 질문과 연결된 것이라 언급이 빠졌네요.
    before_module_proc 였습니다.