다음 코어 업데이트 10월 20일(화) D-43 코어는 매월 셋째 주 화요일 공식 자료는 월 1회 (베타 자료 1~2주) 코어 릴리즈 자료 릴리즈
처리됨 코어 오류

Rhymix 용 모듈이 프레임워크 클래스를 타입으로 받으면 TypeError 가 납니다

zittme 조회 수 10 #33573
사용 버전
1.0.0
처리 버전
1.0.1

짓미로 옮긴 사이트에서 Rhymix 용으로 만들어진 모듈이 오류를 냅니다. 엠봉(mbong.kr)에서 제보가 들어와 확인했습니다.

증상

da_reaction 모듈이 걸린 화면에서 이렇게 멈춥니다.

TypeError: Argument 1 passed to Rhymix\Modules\Da_reaction\Src\Models\ReactionConfig::reactable()
must be an instance of Rhymix\Framework\Helpers\SessionHelper,
instance of Zittme\Framework\Helpers\SessionHelper given

원인

짓미는 프레임워크 클래스를 Zittme\ 이름으로 갖고 있고, Rhymix 용 모듈이 계속 동작하도록 Rhymix\ 이름을 별칭으로 이어 둡니다. 그런데 이 별칭은 Rhymix\ 이름이 먼저 요청될 때만 만들어집니다.

PHP 는 인자 타입 검사에서 자동 로딩을 건너뛸 수 있습니다. 넘어온 객체의 클래스와 그 부모·인터페이스 이름 중에 맞는 것이 없으면, Rhymix\ 이름을 찾아보지도 않고 바로 실패합니다. 그래서 별칭을 만들 기회 자체가 오지 않습니다.

da_reaction 만의 문제가 아닙니다. Rhymix 용 모듈이 프레임워크 클래스를 인자 타입으로 선언하는 경우 모두 해당됩니다.

조치

Zittme 클래스를 읽어 들이는 그 자리에서 Rhymix\ 별칭도 함께 잇도록 common/autoload.php 를 고쳤습니다. 이제 어느 이름이 먼저 요청되든 두 이름이 같은 클래스를 가리킵니다.

작은 재현 코드로 확인했습니다.

고치기 전: 실패 - Argument #1 ($h) must be of type Rhymix\Framework\Helpers\FakeHelper
고친 뒤:   통과

다음 코어 업데이트(9월 15일)에 포함됩니다. 그전에 같은 오류를 만나셨다면 common/autoload.php 한 파일만 교체하면 해결됩니다. 파일이 필요하시면 댓글로 알려 주세요.

댓글 1

  • zittme

    Zittme 1.0.1에서 처리했습니다. Zittme 클래스를 읽어 들이는 자리에서 Rhymix 별칭을 함께 등록해, 프레임워크 클래스를 인자 타입으로 선언한 Rhymix용 모듈도 TypeError 없이 동작합니다. 릴리즈 페이지에서 1.0.1로 업데이트해 주세요. 제보 감사합니다.

로그인 후 댓글을 쓸 수 있습니다.