모듈 module.xml 라우트 관련 질문입니다.
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 8.3 |
<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에 지정된 이벤트 핸들러들은 작동하고 있습니다.
에카
Lv. 2
댓글 9
1. global route 작성 후 관리자 화면에서 모듈 설정 완료는 클릭하셨을까요?
2. 혹시 go/~~~ 이 주소 형태와 충돌할 만한 다른 모듈은 없나요? go라는 이름의 게시판이라든지...
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
혹시 별도로 제가 만든 모듈의 mid가 지정되지 않은 상황이라서 그런걸까요? 따로 페이지나 메뉴는 생성하지 않았거든요
1234처럼 숫자로만 이루어진 값 말고, abcd 같은 것을 넣어 보면 증상이 달라지나요?
global route는 mid가 필요하지 않습니다.
참, GET으로 테스트하실 거라면 method="GET" 또는 method="GET|POST" 추가해 보세요.
이름이 proc으로 시작하는 액션은 기본적으로 POST에만 응답할 거예요.
XE 시절부터 있었던 CSRF 방어 로직 때문에...
module.xml에 action name과 Controllers/Index.php안에 메소드 이름을 dispRedirectLink로 변환하니 ERR_ACT_NOT_FOUND로 에러가 바뀌었네요.
404에러는 proc~~으로 만든게 문제가 맞던것같아요
ERR_ACT_NOT_FOUND는 네이밍을 맞춰주는걸로 해결했습니다 감사합니다!
글로벌 라우트가 원체 예민한 녀석이라... ㅠ