질문/조언질답게시판
Extra Form
PHP PHP 7.2
CMS Rhymix

한 모듈에서 다른 모듈의 설치 여부를 알 수 있는 코드가 있을까요?

 

다른 모듈과 연계를 하기 위해서 코드를 짜는 중인데, test 모듈이 없을때 getModel('test')->test() 이런식으로 호출하면 당연히도(?) 오류가 나더군요

 

if(getModel('test') == NULL) 로도 시도해 봤지만 제 의도대로 작동하지 않더군요;

 

어떤식으로 해야 모듈의 설치 여부를 알 수 있을까요?

  • profile

    if(getModel('test') == NULL) 이것으로 될 텐데요?

     

    getModel('document') → 오브젝트 반환

    getModel('comment') → 오브젝트 반환

    getModel('jgsdvfsiyhfhf') → NULL 반환

     

    물론 addon 모듈처럼 Model 클래스를 정의하지 않는 경우도 있으니

    getModel보다는 getClass로 체크하는 것이 더 확실하지만,

    실제로 사용하실 것이 Model 클래스라면 그걸 직접 확인한다고 문제가 되지는 않습니다.

     

    if(getClass('test') === NULL) {

        // 모듈 설치 안되어 있음

    }

     

    라이믹스나 비교적 최근 버전의 XE라면 클래스 오토로딩이 적용되어 있으니

    그냥 if(class_exists('TestModel')) 로 체크하는 방법도 있고요.

     

  • profile profile
    앗, 그렇게 해서 작동이 되는군요
    그럼 다른 코드에서 오류가 떴던 것 같습니다;;

    만약 getModel 함수에 리턴값이 NULL 일 경우에는, 해당 클래스가 없다는 것으로 받아들이면 된다는것이죠?

    감사합니다!!
  • profile
    저는 그냥 file_exists('./modules/name/name.class.php') 사용합니다.
  • profile profile
    그런 방법도 있네요

    그런데 다른 모듈에서 호출하려면 ../name/name.class.php같이 써줘야 할거 같은데 뭔가 호출 주체에 따라 예외사항이 많을거 같아서 좀 고려할게 많아 보이네요;
  • profile profile
    RXE 설치경로를 기준으로 절대경로를 써주는 방법이 있습니다.
    _XE_PATH_ . 'modules/name/name.class.php'

    라이믹스 전용이라면 _XE_PATH_를 RX_BASEDIR로 대체해도 무방합니다.
  • profile profile

    애초에 따로 경로 고려를 해 주어야 하나요..?
    어차피 실행 경로는 index.php 파일이 있는 위치이니, ./modules/name/name.class.php 로 사용하면 되는게 아닌지요..?

     

    아니면 큰일인데요...ㅠ

  • profile profile
    index.php 기준으로 상대경로를 써도 된다는 것이 원칙입니다만, 다른 사람이 만든 서드파티 자료가 뭔 짓을 할지 모르니;;; 웬만하면 모든 경로는 절대경로를 사용하는 것이 안전합니다.^^