Extra Form
PHP PHP 8.3
CMS Rhymix 2.1

현재 요청의 module, act 를 정확히 가져올 수 있는 API가 있을까요?

 

요청된 module, act 말고, 실제로 실행된 것이요.

 

예를 들어 사이트 첫 페이지나, 게시판 목록 같은 경우...

 

module, mid 정도는 얻을 수 있지만 dispBoardContent, dispPageIndex(였나) 이런건 확인이 안 되네요.
Context::all() 등으로 다 찍어봐도 찾을 수가 없네요.

 

요청된 module, act 말고 실제로 실행된 정보를 얻고 싶습니다.

 

ModuleHandler 클래스에 act 같은 멤버변수가 있긴한데 저 인스턴스를 가져올 수도 없는 것같네요.

 

ModuleHandler::procModule() 에서 최종적으로 act가 확정되는 것같네요

if(!$this->act)

{

$this->act = $xml_info->default_index_act;

}

 

module 도 procModule 안에서 최종 확정되는 것같고요.

 

근데 이걸 어떻게 접근해서 가져올까요?

  • profile

    라이믹스 최신 버전 기준으로 Context::getCurrentRequest() 하면 R\F\Request 클래스의 인스턴스가 반환되고, 여기에 module, mid, act 및 라우팅 정보가 담겨 있습니다. 모듈 클래스나 템플릿에서는 $this->request 도 동일한 내용입니다. 현재 요청의 속성을 확인하는 가장 오피셜한 방법입니다.

     

    단, 각 모듈의 인덱스 페이지인 경우에는 원래 act가 없습니다. act가 없으면 모듈 정보를 뒤져서 dispBoardContent, dispPageIndex 등 해당 모듈의 인덱스 act를 대신 실행하는 것입니다. 따라서 코어에서도 "현재 act가 없다!" 라고 하지, "현재 act는 dispPageIndex이다!" 라고 인식하지는 않습니다. ModuleModel에서 해당 모듈 정보를 불러와서 인덱스 act가 무엇인지 찾아야 하지요.

     

    물론 이 경우에도 해당 액션을 호출하기 직전 $this->act에 메소드명이 셋팅되므로, 그 후에 $current_module_info->act를 찍어보면 값이 들어가 있을 가능성이 높습니다.

  • profile profile

    `\Context::getCurrentRequest()` 이걸 확인해봐도 아래와 같은 요청 정보만 나오네요.
    결국 ModuleHandler::procModule() 메소드 안에서만 확인이 가능한 것같아 보이네요. 😭

    Rhymix\Framework\Request Object
    (
        [method] => GET
        [compat_method] => GET
        [url] => board
        [hostname] => rhymix.local
        [domain] =>
        [protocol] => https
        [callback_function] =>
        [_route_status:protected] => 200
        [_route_options:protected] => stdClass Object
            (
                [cache_control] => 1
                [check_csrf] => 1
                [is_forwarded] =>
                [is_indexable] => 1
                [enable_session] => 1
            )
    
        [module] =>
        [mid] => board
        [act] =>
        [args] => Array
            (
                [mid] => board
            )
    
    )

     

  • profile

    `moduleHandler.init` before 트리거에서 전달해주는 ModuleHandler 인스턴스를 참조로 저장해놨다가 끌어다 쓰니까 나오네요 🤩

    그래도 이게 API가 있으면 좋겠네요.

  • profile

    https://xetown.com/download/1801192
    이 모듈 업데이트 하는데 사용했습니다.
    https://github.com/rhymix-guide/module-debugbar/commit/64d3b2cca259ab5e6cbbdcb6edf54908af3f69f5#diff-95eefaa38127658ac32d95528023a686627eee008d4d6161d316aeb420f3b870

     

    첫 페이지에서는 나오는데 메뉴에 걸린 /index 로 가니까 이것만 안 나오네요. 🤔

    스크린샷 2024-01-17 오후 10.17.27.png