2014-01-17 3 views
4

현재 스케줄러 태스크가 있지만 (동일한 확장자의) 내 extbase 저장소에서 함수를 사용하려고합니다.스케줄러 태스크에서 저장소 기능 실행

"PHP의 치명적인 오류 : Extop의 컨트롤러 나 컨트롤러를 포함시키려는 시도가 있더라도 관계없이 비 멤버 객체에 add() 멤버 함수 호출"이 계속 발생합니다.

내 SampleTask.php : 내 ext_localconf.php에

제대로
namespace TYPO3\ExtName\Task; 

class SampleTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask { 

    public function execute() { 
     $controller = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\ExtName\Controller\SampleController'); 
     $new = new \TYPO3\ExtName\Domain\Model\Sample; 
     $new->setName('test'); 
     $controller->createAction($new); 
    } 
} 

그리고 정의

누군가가 내 저장소 (또는 컨트롤러)에 액세스 할 수있는 방법을 설명해 -extbase- 내 SampleTask.php에서 수 .

TYPO3 사용하기 6.2.

감사합니다.

답변

8

컨트롤러를 makeInstance()으로 인스턴스화했기 때문에 PHP 오류가 발생했습니다. makeInstance를 사용하여 objectManager (\TYPO3\CMS\Extbase\Object\ObjectManager)를 가져오고 $objectManager->get('TYPO3\ExtName\Controller\SampleController')을 사용하면 컨트롤러 내부의 종속성 삽입 (예 : 저장소)이 작동합니다.

그러나 당신이 컨트롤러 액션 호출 할 필요 없다, 그래서 바로 저장소를 얻기 위해 objectManager를 사용할 수 있습니다

뭔가 같은 :

namespace TYPO3\ExtName\Task; 

class SampleTask extends \TYPO3\CMS\Scheduler\Task\AbstractTask { 

    public function execute() { 
     $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\CMS\Extbase\Object\ObjectManager'); 
     $sampleRepository= $objectManager->get('\TYPO3\ExtName\Domain\Repository\SampleRepository'); 
     $new = new \TYPO3\ExtName\Domain\Model\Sample; 
     $new->setName('test'); 
     $sampleRepository->add($new); 
     $objectManager->get('TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface')->persistAll(); 
    } 
} 
+0

안녕 다니엘, 당신 주셔서 감사합니다 당신의 대답! 내 스케줄러 작업에서 더 이상 오류가 발생하지 않지만 저장소에 아무 것도 추가 할 수 없습니다. 나는 Pid가 문제라고 생각하고 아무 효과가없는 configurationManager로 설정하려고 시도했다. 문제없이 내 컨트롤러의 저장소에 항목을 추가 할 수 있습니다. 또한 플러그인을 컨텐츠 요소에 추가 할 때 '레코드 저장 페이지'에 PID를 설정해야합니다. Pid는 typoscript 구성에서 설정됩니다. – Daan

+0

가능성이 가장 높습니다. 추가 된 객체를 유지하려면 persitenceManager를 수동으로 호출해야합니다. 나는 그것을 내 대답에 덧붙였다. – Daniel

+0

persitenceManager가 추가되었습니다! 내가 지금 실행중인 유일한 문제는 pid가 2 (?)로 설정되어 있다는 것입니다. – Daan