我写了一个命令控制器来处理从URL导入的数据。 伪语法是这样的:
class ImportCommandController extends \TYPO3\CMS\Extbase\Mvc\Controller\CommandController
{
public function importCommand($auth){
$data = file_get_content();
}
}
这是有效的。
但是当我尝试从我的后端模块的Action Controller调用该命令时,我得到了错误。
下面是代码:
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();
}
}
当我这样打importAction()
时,我得到:
"在null"
上调用成员函数testCommand()
当我取消注释makeInstance
时,我得到:
"在null"
上调用成员函数get()
可悲的是,这个主题在TYPO3文档中的文档相当糟糕。 有人可以帮我解决这个问题或者指出正确的方向吗?
答案 0 :(得分:2)
我想略微改变René已经给出的答案并添加一些代码示例。我还建议将您的导入逻辑放入专用类中,例如ImportService
:
namespace Vendor\MyExt\Service;
use TYPO3\CMS\Core\SingletonInterface;
class ImportService implements SingletonInterface
{
public function importData()
{
// import logic goes here
}
}
您现在可以将此类注入CommandController和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 :(得分:1)
不推荐在CommandController
中使用ActionController
,因为它们具有不同的环境变量。
如果您想在更多位置使用某些代码,建议您使用Utility类。
因此,在my_ext/Classes/Utility/
目录中创建一个类,调用类ImportUtility
之类的类,并尝试编译从某个控制器独立的导入。