Extra Form
PHP PHP 8.3
CMS Rhymix 2.1

관리자페이지에서 애드온을 클릭하면 에러가 발생합니다.

 

TypeError #0 "count(): Argument #1 ($value) must be of type Countable|array, null given" in modules/addon/addon.admin.model.php on line 401

 

아무래도 코어다보니 수정을 하면안될것 같은데 에러가 발생하는 이유가 무엇일까요?

 

401행은

 

for($i = 0, $c = count($val->options); $i < $c; $i++)와 같습니다

 

이것도 Null 에러인것같은데 코어에서 왜 Null이 발생했는지 모르겠습니다.

 

for ($i = 0, $c = isset($val->options) ? count($val->options) : 0; $i < $c; $i++)

로하면 작동은 되긴 합니다.

 

감사합니다.

  • Lv37

    conf/info.xml에서 <options>를 이상하게 선언하는 애드온이 있는 모양입니다.

     

    코어 쪽에서도 방어는 해보겠습니다.

    https://github.com/rhymix/rhymix/commit/6dbfde8de1428cdb37b24de1e1c38825810e0772

  • Lv37 Lv12
    항상 감사드립니다 ㅎㅎ 8.3에 거의 코앞 까지 다다다렀네요.
    뿌듯합니다!
  • Lv37 Lv12

    정확하네요

    <addon version="0.2">
    라고 안되어있고
    <addon version="1.0">
    으로 되어있는 애드온을 발견했고 수정하니 에러가 발생하지 않습니다.


    다시 1.0으로 버전을 해두면
    401행을 고쳐도
    TypeError #0 "in_array(): Argument #2 ($haystack) must be of type array, null given" in modules/addon/tpl/setup_addon.html on line 109
    에러가 나네요

    애드온을

    <addon version="0.2">로 고쳐서 이용하겠습니다!

     

     

    갑자기든 궁금증인데 왜 애드온은 버전을

     

    <addon version="0.2">로 지정해서 사용할까요

    애드온 0.1은 Xe 0.2는 그이후에 나온 템플릿 같은것일까요?

     

    그 아래쪽에서 <version> 으로 실제 버전지정하는게 있는데 헷갈림이 생기는것 같네요

  • Lv12 Lv37

    최상단의 버전은 애드온의 버전이 아닌 XML 문법의 버전을 의미합니다.

    라이믹스 템플릿에 v1이 있고 v2가 있듯이, XE에서 애드온을 정의하는 XML 문법도 0.1과 0.2 버전이 있었던 것 같더군요. 아마 초창기에 애드온 구조를 한 번 갈아엎었던 모양입니다.

    그런데 정의되지 않은 1.0 버전을 사용하겠다고 우기고 있으니 잘못 해석되는 것도 무리가 아니지요. PHP 8.3이니까 오류가 발생한 것뿐이고, 그 전부터 잘못 해석되는 부분이 있었을 것입니다.

     

    아니, 어쩌면 잘못 해석되는 것에 맞추어 구현하는 바람에 오히려 정상 작동했을지도 모르지요. 애드온의 형태로 배포되는 자료의 코드 퀄리티는 그다지 기대하지 않는 것이 좋으니까요. (디버깅하기 워낙 난감한 구조여서, 경험 많은 개발자도 실수를 눈치채기 어려울 수 있습니다. 애드온 설계는 솔직히 제로님의 실수였다고 생각합니다.)

  • Lv12
    테스트를 마치고 오늘 과감하게 8.3으로 적용 완료했습니다. 아직까지는 별 특이점은 없네요