BE AJAX 请求交付空存储库
BE AJAX request delivers empty repository
我想构建一个 BE 扩展,它从另一个扩展读取存储库并将数据作为 CSV/XSL/XSLX 提供,而不将其保存在服务器上。例如输出空白 window 中的数据并修改 headers.
BE AJAX 请求被正确触发
$TYPO3_CONF_VARS['BE']['AJAX']['tx_myext::ajaxID'] = 'filename:object->method';
如果从后端调用存储库也可以正常工作。
public function ajaxAction() {
...
$this->extRepository =& t3lib_div::makeInstance('Tx_MySecondExt_Domain_Repository_DataRepository');
...
}
但是当从 domain.tld/typo3/ajax.php?ajaxID=tx_myext::ajaxID
调用时
如果我直接通过 AJAX 使用 findAll()
方法调用第二个存储库的存储库,它也找不到 Tx_MySecondExt_Domain_Repository_DataRepository
。它只做 return NULL。
手动设置 QuerySettings 时也是如此
public function findAllexport() {
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
return $query->execute();
}
也仅供参考,它是在 4.5
编辑:
使用 ObjectManager 调用存储库也不起作用
$objectManager = t3lib_div::makeInstance('Tx_Extbase_Object_ObjectManager');
$this->extRepository = $objectManager->get('Tx_MySecondExt_Domain_Repository_DataRepository');
在导出操作中
... Repository to file generation
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="data.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
... output file
exit;
完成,没有 ajax 加上非常简单和愚蠢 ;)
不过,如果有人知道初始问题的答案,我将不胜感激。
您是否确定在加载您自己的扩展程序之前加载了其他扩展程序?看看你的 localconf.php
。通常你需要在你的 ext_emconf.php
中指定依赖项,然后再安装你的扩展。
还要确保您已将这两个扩展的配置添加到您的 TypoScript 模板的静态包含中。
我想构建一个 BE 扩展,它从另一个扩展读取存储库并将数据作为 CSV/XSL/XSLX 提供,而不将其保存在服务器上。例如输出空白 window 中的数据并修改 headers.
BE AJAX 请求被正确触发
$TYPO3_CONF_VARS['BE']['AJAX']['tx_myext::ajaxID'] = 'filename:object->method';
如果从后端调用存储库也可以正常工作。
public function ajaxAction() {
...
$this->extRepository =& t3lib_div::makeInstance('Tx_MySecondExt_Domain_Repository_DataRepository');
...
}
但是当从 domain.tld/typo3/ajax.php?ajaxID=tx_myext::ajaxID
调用时
如果我直接通过 AJAX 使用 findAll()
方法调用第二个存储库的存储库,它也找不到 Tx_MySecondExt_Domain_Repository_DataRepository
。它只做 return NULL。
手动设置 QuerySettings 时也是如此
public function findAllexport() {
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
return $query->execute();
}
也仅供参考,它是在 4.5
编辑:
使用 ObjectManager 调用存储库也不起作用
$objectManager = t3lib_div::makeInstance('Tx_Extbase_Object_ObjectManager');
$this->extRepository = $objectManager->get('Tx_MySecondExt_Domain_Repository_DataRepository');
在导出操作中
... Repository to file generation
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="data.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('Pragma: public'); // HTTP/1.0
... output file
exit;
完成,没有 ajax 加上非常简单和愚蠢 ;)
不过,如果有人知道初始问题的答案,我将不胜感激。
您是否确定在加载您自己的扩展程序之前加载了其他扩展程序?看看你的 localconf.php
。通常你需要在你的 ext_emconf.php
中指定依赖项,然后再安装你的扩展。
还要确保您已将这两个扩展的配置添加到您的 TypoScript 模板的静态包含中。