TYPO3 ajax 404 eID未注册

时间:2017-05-13 06:15:12

标签: php jquery ajax typo3

我有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是什么。非常感谢您的建议!

3 个答案:

答案 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