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

트리거1.PNG

 

위에 사진은 document.model.php 의 getDocumentList 함수속 트리거 입니다.

 

검색 결과를 변경하기 위해 제가 만든 모듈 'abc'(예시)에 저 트리거를 넣어놓고, 트리거 처리를 해서 return을 했습니다.

 

트리거2',.PNG

여기서 abc 모듈에 getBoardList에는 executequery를 통해 받아온 DB output이 그대로 리턴됩니다.

 

그리고 trigger에서 리턴하는 $output의 값은 DB의 데이터가 그대로 들어가 있습니다

 

그런데, 제일 위에 getDocumentList함수에 트리거를 받아온 output값에는 그냥 일반 BaseObject(0,"success")를 호출한 값이 들어있더군요

 

DB에 관련된 값이 전혀 존재하지 않았습니다.

 

혹시 트리거에서 모체로 데이터를 넘겨줄때는 다른 방법을 거쳐야 할까요?

 

감사합니다~

  • profile

    트리거에서 return할 수 있는 것은 new BaseObjct(-1, 에러메시지) 뿐입니다.

    에러가 아닌 반환값은 모두 무시됩니다.

     

    예외적으로, getDocumentList before 트리거에서는

        $obj->use_alternate_output = 반환하고 싶은 데이터;

    이렇게 하시면 게시판 목록이 그것으로 대체됩니다. 이것도 return하는 것은 아니고, 이미 받아온 $obj에 속성 하나를 추가하는 것 뿐입니다. 또한 아무거나 넣으면 안 되고 getDocumentList에서 원래 반환하는 것과 완벽하게 똑같은 구조로 만들어서 넣어야 합니다. 모든 스킨들이 그 데이터 구조를 기반으로 만들어져 있으니까요.

  • profile profile

    그런데 getDocumentList before 트리거에 $obj를 인자로 줄때 &$obj로 주지 않아서 triggerbeforeListDocument(위 사진에 나온 트리거 함수)에서 $obj->use_alternate_output = [~~~] 처럼 수정해도 적용이 안되네요;

    $obj->use_alternate_output 같은 경우는 어떤식으로 수정할 수 있나요?

  • profile profile

    public function triggerBeforeListDocument(&$obj)

    함수를 선언할 때 &를 넣으면 무엇을 넘기더라도 참조(레퍼런스)로 넘어옵니다.
    함수를 호출하는 시점에 &를 넣는 것이 아닙니다. 예전에는 그것되 되었지만, PHP 7에서는 에러납니다.

     

    그런데 $obj는 객체이기 때문에 &를 넣든 안 넣든 무조건 참조입니다.

    인식하지 못한다면 use_alternate_output에 정상적인 구조의 데이터가 아닌 것을 넣으셨거나,

    그 변수를 덮어쓰는 슈퍼캐시 같은 것이 설치되어 있어서 그럴 가능성이 높습니다.

    아니면 아무 의미없는 $output을 여전히 뜯어보고 계시거나...

  • profile profile
    캐시를 지우고 사용해보니 정상적으로 작동하네요!
    감사합니다!