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 爬取网页内容并保存需要完整的python代码
  • ¥30 NIRfast软件使用指导
  • ¥20 matlab仿真问题,求功率谱密度
  • ¥15 求micropython modbus-RTU 从机的代码或库?
  • ¥15 铜与钢双金属板叠加在一起每种材料300mm长,18mm宽,4mm厚一端固定并加热至80℃,当加热端温度保持不变时另一端的稳态温度。ansys
  • ¥15 django5安装失败
  • ¥15 Java与Hbase相关问题
  • ¥15 后缀 crn 游戏文件提取资源
  • ¥15 ANSYS分析简单钎焊问题
  • ¥20 bash代码推送不上去 git fetch origin master #失败了