Extra Form
PHP PHP 8.3
CMS Rhymix 2.1

<module>

  <actions>

    <action name="procLinkRedirect" class="Controllers\Index" global-route="true" standalone="true">
      <route route="go/$param:any" />
    </action>

  </actions>

</module>

 

이 내용으로 액션이 지정되어있으면 /go/~~ 로 했을때 Controllers 안에 Index.php 안에 정의되어있는 procLinkRedirect를 불러오길 희망하는데 404에러가 표시가 됩니다.

 

컨트롤러 파일의 내용물은 다음과 같습니다.

 

<?php

namespace Rhymix\Modules\ModuleName\Controllers;

 

class Index extends Base
{
    public function init()
    {
        $this->setTemplatePath($this->module_path . 'views/');
    }
    
    public function procLinkRedirect($args) {
        debugPrint(true);
    }
}

?>

 

 

이 구조에서 잘못된게 있을까요?

 

모듈이 아예 안불러와지는 상황은 아닙니다. module.xml에 지정된 이벤트 핸들러들은 작동하고 있습니다.

  • Lv37

    1. global route 작성 후 관리자 화면에서 모듈 설정 완료는 클릭하셨을까요?

    2. 혹시 go/~~~ 이 주소 형태와 충돌할 만한 다른 모듈은 없나요? go라는 이름의 게시판이라든지...

  • Lv37 ? Lv2
    1. 네 했습니다. module.xml 갱신할때마다 필요하다는건 아직도 기억하고있어서 module.xml 갱신하고 진행했습니다.
    2. 다른것보다 문서쪽이 의심갑니다. debug 패널을 확인했을때 document item 관련 쿼리가 진행되는걸 방금 확인했습니다. /go/ 로 접속하면 1번까지만 쿼리가 진행되고 /go/1234 ~~ 이런식으로 접속하면 3번까지 쿼리가 진행됩니다.

    01. SELECT * FROM `rx_modules` AS `modules` WHERE `mid` = ?

    Caller: modules/module/module.model.php:251 (×3)
    (ModuleModel::getModuleInfoByMid)
    common/framework/Router.php:459
    common/framework/Router.php:157
    classes/context/Context.class.php:211
    index.php:52
    Connection: master
    Query ID: module.getMidInfo
    Query Time: 0.0012 sec
    Result: success

    02. SELECT `modules`.*, `documents`.`is_notice`, `documents`.`status` FROM `rx_modules` AS `modules`, `rx_documents` AS `documents` WHERE `documents`.`document_srl` = ? AND `modules`.`module_srl` = `documents`.`module_srl`

    Caller: modules/module/module.model.php:183
    (ModuleModel::getModuleInfoByDocumentSrl)
    classes/module/ModuleHandler.class.php:761
    classes/module/ModuleHandler.class.php:188
    index.php:60
    Connection: master
    Query ID: module.getModuleInfoByDocument
    Query Time: 0.0004 sec
    Result: success

    03. SELECT * FROM `rx_documents` AS `documents` WHERE `document_srl` = ?

    Caller: modules/document/document.item.php:118
    (DocumentItem->_loadFromDB)
    modules/document/document.item.php:75
    modules/document/document.model.php:166
    classes/module/ModuleHandler.class.php:802
    classes/module/ModuleHandler.class.php:188
    index.php:60
    Connection: master
    Query ID: document.getDocument
    Query Time: 0.0004 sec
    Result: success
  • Lv37 ? Lv2

    혹시 별도로 제가 만든 모듈의 mid가 지정되지 않은 상황이라서 그런걸까요? 따로 페이지나 메뉴는 생성하지 않았거든요

  • ? Lv2 Lv37

    1234처럼 숫자로만 이루어진 값 말고, abcd 같은 것을 넣어 보면 증상이 달라지나요?

    global route는 mid가 필요하지 않습니다.

  • Lv37 ? Lv2
    쿼리가 1번까지로 줄어들었긴 한데 404페이지는 계속 반환되고있습니다.
  • ? Lv2 Lv37

    참, GET으로 테스트하실 거라면 method="GET" 또는 method="GET|POST" 추가해 보세요.
    이름이 proc으로 시작하는 액션은 기본적으로 POST에만 응답할 거예요.

    XE 시절부터 있었던 CSRF 방어 로직 때문에...

  • Lv37 ? Lv2

    module.xml에 action name과 Controllers/Index.php안에 메소드 이름을 dispRedirectLink로 변환하니 ERR_ACT_NOT_FOUND로 에러가 바뀌었네요.
    404에러는 proc~~으로 만든게 문제가 맞던것같아요

    ERR_ACT_NOT_FOUND는 네이밍을 맞춰주는걸로 해결했습니다 감사합니다!

  • ? Lv2 Lv37
    아 해결하셨군요. 고생하셨습니다!
    글로벌 라우트가 원체 예민한 녀석이라... ㅠ
  • Lv37 ? Lv2
    주말 늦은시간에 답변주셔서 감사합니다 ^^ 네이밍 관련 규칙이 있는지 몰랐었는데 이번에 알아가네요