2013-11-25 4 views
0

이전에 해 본 적이 없으므로 약간의 정보가 필요합니다. (일반적으로)cakephp/php가 백그라운드에서 실행됩니다.

코드 :

$cofig = Configure::read('config'); 
    if ($config['stuff'] == 1){ 
     $this->Session->setFlash('it is already done this month'); 
     $this->redirect('/to/some/where'); 
    } 
    elseif ($config['stuff'] == 2){ 
     $this->Session->setFlash('it is already running'); 
     $this->redirect('/to/some/where'); 
    } 
    else { 
     SomeComponent::SomeFunction(); //this I need to launch in background while user continues further 
     $this->Session->setFlash('you have launched it'); 
     $this->redirect('/to/some/where'); 
    } 

"SomeComponent는"몇 가지 기능이 포함되어 있습니다. 배경이 더 이상 계속되는 동안 특정 기능 "SomeFunction()"을 시작해야합니다.
기능 "SomeComponent :: SomeFunction()"은 pdfs를 생성하고 데이터베이스와 상호 작용하며 Cakephp의 특정 메소드를 사용하여 모든 작업을 수행합니다. 사용자는 데이터베이스를 통해 출력을 수신하므로 함수 자체에서 검색 할 필요가 없습니다.
그래서 어떤 방법으로이를 수행 할 수 있는지 명확하지 않고 사용하기 가장 좋은 방법과 각 방법의 단점이있을 수 있습니다 (특히 보안 문제).

나는 모든 것을 이해할 수있는 방법으로 설명하기를 바랍니다. 당신이 이것을 멀리 읽었다면 - 감사합니다.

답변

0

"SomeComponent :: SomeFunction()"프로세스가 너무 오래 걸립니까? 대답은 그렇다면 나는 a shell에 그 기능을 포장 것이고 당신이 그 배경 과정을 파견하기 위해서는 Observer을 사용하는 다음 단계로 가져 가고 싶다면.

Here is CakePHP에서 이벤트 처리에 대한 소개.

+0

이 프로젝트로 돌아와서 CakeEvent로 Observer 패턴을 만들었습니다. 모든 것이 한 지점까지 잘 작동합니다. 사용자는 완료 될 때까지 기다려야합니다 (별도의 프로세스로 디스 패칭하지 않음). 너무 오래 걸리지는 않겠지 만 최종 사용자가 사용하는 모든 마술을 새로 고침하거나 백업하거나 다른 방법으로 방해하여 사용자가 중단 할 수있을만큼 길다. – uldo

관련 문제