douhu2890 2017-01-04 07:58
浏览 36
已采纳

从PHP / TYPO3 Extbase中的ActionController调用CommandController

I wrote a Command Controller that handles data import from an URL. pseudo-syntax is like this:

class ImportCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController
{
  public function importCommand($auth){
    $data = file_get_content();
  }
}

this works. But when I try to call that command from the Action Controller of my backend Module I get errors. Heres the code: ActionController:

class ImportController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
    /**
     * @var \Vendor\MyExt\Command\ImportCommandController importCommandCtrl
     * @inject
     */
    protected $importCommandCtrl;

    public function importAction()//($url,$usr,$pass)
    {
        //$this->importCommandCtrl = GeneralUtility::makeInstance('Vendor\MyExt\Command\ImportCommandController');
        $this->importCommandCtrl->testCommand();
    }
}

When I call importAction() like this, I get:

"Call to a member function testCommand() on null"

When I uncomment the makeInstance, I get:

"Call to a member function get() on null"

Sadly, this topic is documente rather poorly in the TYPO3 Docs. Can someone help me on this or point me to the right direction?

  • 写回答

2条回答 默认 最新

  • dongzang7182 2017-01-04 09:59
    关注

    I'd like to slightly alter the answer already given by René and add some code examples. I also recommend to put your import logic into a dedicated class, e.g. ImportService:

    namespace Vendor\MyExt\Service;
    use TYPO3\CMS\Core\SingletonInterface;
    class ImportService implements SingletonInterface
    {
        public function importData()
        {
           // import logic goes here
        }
    }
    

    You can now inject this class as a dependency of your CommandController and your ActionController:

    class ImportController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
    {
        /**
         * @var \Vendor\MyExt\Service\ImportService
         * @inject
         */
         protected $importService;
    
        public function importAction()
        {
            $this->importService->importData();
        }
    }
    
    class ImportCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandControlle
    {
        /**
         * @var \Vendor\MyExt\Service\ImportService
         * @inject
         */
        protected $importService;
    
        public function importCommand()
        {
            $this->importService->importData();
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用