질문/조언질답게시판
Extra Form
PHP PHP 7.4
CMS Rhymix 2.x

음.. 실행시간이 엄청 오래걸리는 기능이 있는데 이걸 그냥 컴맨드라인에서 실행해버리고 싶거든요...

 

예를 들어 그게 controller에 있는 procLongTime() 이라면 컴맨드라인에서

 

php index.php?module=my_module&act=procLongTime

 

이런 식으로 말입니다. 아 물론 컴맨드라인에서 저런식으로 파라미터 주면 안되는건 압니다.

 

php index.php module=my_module act=procLongTime

 

이런 식으로 주면 안에서 처리해서 $_GET에 직접 때려박도록 수정했습니다.

 

근데 역시 생각대로 되진 않네요. 컴맨드라인에서 실행한 것과 웹에서 실행한건 환경이 너무 틀려서...

 

컴맨드라인에서 라이믹스의 모듈 콘트롤러를 직접 호출할 방법이 없을까요?

 

  • profile

    index.php를 실행하지 말고 별도로 엔트리 포인트를 만들어서 원하시는 액션을 직접 호출하세요. 어느 파일에서든지 autoload.php 파일을 인클루드하고 Context::init() 해주는 초기화 과정만 거치면 라이믹스 내부 함수와 모듈 클래스들을 자유롭게 호출할 수 있습니다.

     

    예:

    <?php

    include 'common/autoload.php'; // 필요에 따라 상대경로 조정

    Context::init();

    $oModuleController = ModuleController::getInstance();

    $oModuleController->procLongTime();

     

  • profile ?

    그러니까 ModuleHandler를 쓸 수는 없다는 말씀이신거죠?

    그럼 컨트롤러 클래스의 인스턴스를 제가 직접 만들어서 호출해야 하나요?

  • profile ?
    감사합니다 바로 해보겠습니다.
  • ? profile

    네, ModuleHandler는 $_GET, $_POST 등에서 데이터를 받아다 쓰는데
    CLI에서 넘기는 변수는 $argv였던가? 전혀 다른 곳에 저장되니까 인식을 못하지요.
    특정 모듈의 특정 함수만 호출하면 되는데 굳이 모듈 찾고 권한 체크하고
    결과 받아서 응답 메시지를 생성하는 복잡한 과정을 거치는 것 자체가 낭비고요.