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 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分