我有TYPO3 7.6.18。我试图在前端配置ajax请求。我需要我的ajax请求调用特定的插件控制器和操作,因为我需要。我尝试了不同的ajaxDispatchers。
现在我收到错误404 eID未注册
我在local_conf.php上包含ajaxDispatcher
$GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include']['Fefiles'] = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('fefiles').'Classes/Ajax/EidDispatcher.php';
EidDispatcher.php
<?
use \TYPO3\CMS\Core\Core\Bootstrap;
use \TYPO3\CMS\Core\Utility\ArrayUtility;
use \TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
use \TYPO3\CMS\Core\Utility\GeneralUtility;
use \TYPO3\CMS\Frontend\Utility\EidUtility;/**/
/**
* Gets the Ajax Call Parameters
*/
$_gp = \TYPO3\CMS\Core\Utility\GeneralUtility::_POST();
$_gp = \TYPO3\CMS\Extbase\Utility\ArrayUtility::arrayMergeRecursiveOverrule(
$_gp,
\TYPO3\CMS\Core\Utility\GeneralUtility::_GET()
);
$ajax = array();
$ajax['arguments'] = $_gp;
$ajax['vendor'] = 'Nng';
$ajax['extensionName'] = 'Nnfesubmit';
$ajax['pluginName'] = 'Pi1';
$ajax['controller'] = 'Eid';
$ajax['action'] = 'processRequest';
/**
* @var $TSFE \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
*/
global $TYPO3_CONF_VARS;
$TSFE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController', $TYPO3_CONF_VARS, 0, 0);
$GLOBALS['TSFE'] = $TSFE;
\TYPO3\CMS\Frontend\Utility\EidUtility::initLanguage();
\TYPO3\CMS\Frontend\Utility\EidUtility::initTCA();
// Get FE User Information
$TSFE->initFEuser();
$TSFE->initUserGroups();
// Important: no Cache for Ajax stuff
$TSFE->set_no_cache();
$TSFE->checkAlternativeIdMethods();
$TSFE->determineId();
$TSFE->initTemplate();
$TSFE->getConfigArray();
\TYPO3\CMS\Core\Core\Bootstrap::getInstance();
$TSFE->cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer');
$TSFE->settingLanguage();
$TSFE->settingLocale();
/**
* Initialize Backend-User (if logged in)
*/
$GLOBALS['BE_USER'] = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Authentication\BackendUserAuthentication');
$GLOBALS['BE_USER']->start();
/**
* Initialize Database
*/
$TSFE->connectToDB();
/**
* @var $objectManager \TYPO3\CMS\Extbase\Object\ObjectManager
*/
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
/**
* Initialize Extbase bootstap
*/
$bootstrapConf['extensionName'] = $ajax['extensionName'];
$bootstrapConf['pluginName'] = $ajax['pluginName'];
$bootstrap = new \TYPO3\CMS\Extbase\Core\Bootstrap();
$bootstrap->initialize($bootstrapConf);
$bootstrap->cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer');
/**
* Build the request
*/
$request = $objectManager->get('TYPO3\CMS\Extbase\Mvc\Request');
$request->setControllerVendorName($ajax['vendor']);
$request->setcontrollerExtensionName($ajax['extensionName']);
$request->setPluginName($ajax['pluginName']);
$request->setControllerName($ajax['controller']);
$request->setControllerActionName($ajax['action']);
$request->setArguments($ajax['arguments']);
//$ajaxDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Nng\Nnsubscribe\Controller\EidController');
//echo $ajaxDispatcher->processRequestAction();
$response = $objectManager->get('TYPO3\CMS\Extbase\Mvc\ResponseInterface');
$dispatcher = $objectManager->get('TYPO3\CMS\Extbase\Mvc\Dispatcher');
$dispatcher->dispatch($request, $response);
echo $response->getContent();
?>
我的请求:
var request = {
id: 1,
mvc: {
vendor: 'Istar',
extensionName: 'Fefiles',
pluginName: 'Piphoto',
controller: 'Photo',
action: 'test'
},
};
$.ajax({
type: "POST",
url: "index.php",
data: {
eID: 'Fefiles',
request: request
},
success: function(msg){
console.log(msg);
}
});
我认为它不仅对我有用,对其他用户也有用。人们,请帮我解决这个问题,并了解这个eID是什么。非常感谢您的建议!
答案 0 :(得分:0)
$ GLOBALS [&#39; TYPO3_CONF_VARS&#39;] [&#39; FE&#39;] [&#39; eID_include&#39;] [&#39; ajaxDispatcher&#39;]
[&#39; ajaxDispatcher&#39;]此处必须与您在eID中发送的内容相同)
答案 1 :(得分:0)
您的eID必须在网址中设置,而不是在帖子数据中。 请求应为:
var request = { id:1, mvc:{ 供应商:'Istar', extensionName:'Fefiles', pluginName:'Piphoto', 控制器:'照片', 行动:'测试' },
};
$.ajax({
type: "POST",
url: "index.php?eID=Fefiles",
data: {
request: request
},
success: function(msg){
console.log(msg);
}
});
答案 2 :(得分:0)
使用Extbase时,请考虑使用页面类型而不是eID。请参阅此博文:http://insight.helhum.io/post/104880845705/dont-use-eid-ajax-dispatchers-for-your-extbase