Zum Inhalt springen

eID und DataMapper: Object-Properties bleiben Null

Erstellt am 31. August 2014 · 2 Antworten · letzte Antwort am 17. November 2014

Tags: JavaScript & AJAX, Frage

sven_de_ka ·

Hallo zusammen, ich baue derzeit eine IMporter, der per post-Request angestoßen wird. Die Extension rufe ich per eID auf.

zum Verarbeiten des Requests habe ich mir analog zum AjaxDispatcher ( http://t3-developer.com/extbase-fluid/extensions-erweitern/ajax-in-extensions/ajax-dispatcher-eid-in-typo3-61/ )
meine ApiDispatcher gebaut.

Das Problem ist nun, dass die Properties von Objekten die ich aus anderen EXTs aufrufe (LoremRepository über DependencyInjection innerhalb meines Controllers) in meiner zugehörigen ("apiCall-")Action Null bleiben.

Testweise habe ich meinem Importer schnell ein FE-PLugin verpasst, und habe mir dieselben Objekte ausgeben lassen. Erfolgreich. die Properties wurden befüllt wie es zu erwarten warL
Wenn ich nach Leeren des Caches nun zuerst das FE-Plugin aufrufe und erst dann meine APi über eID so funktioniert alles einwandfrei.
Wenn ich zuerst den Aufruf via eID mache, geht nichts (aka die Properties bleiben wie oben beschrieben NULL).

ich konnte das Problem zum DataMApper (MapSingleRow) zurück verfolgen und nehme, dass Über meinen eID-Dispatcher eine Confuguration leer bleibt (TCA?) und das ganze auch fehlerhaft in den Cache übernommen wird.

haltet ihr meine Annahme für richtig, dass die TCA nicht korrekt geladen wird? Wenn ja: wie kann ich sicherstellen, das die TCA korrekt geholt wird?

vielen lieben Dank schonmal!

CODE:

ApiDispatcher

	/**
	 * variables to handling the request
	 */
	$vendorName = 'Z3';
	$extensionName = 'Z3Fasapi';
	$pluginName = 'Api';
	$controllerName = 'Api';
	$controllerActionName = 'apiCall';
	
	/**
	 * Gets the Ajax Call Parameters
	 */
	$api = \TYPO3\CMS\Core\Utility\GeneralUtility::_GP( 'api' );	

	/**
	 *  bootstrap the extension
	 */

	// TSFE
	$TSFE = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController', $TYPO3_CONF_VARS, 0, 0);
	\TYPO3\CMS\Frontend\Utility\EidUtility::initLanguage(); 

	$TSFE->initFEuser();
	$TSFE->set_no_cache();
//	$TSFE->checkAlternativCoreMethods();
	$TSFE->checkAlternativeIdMethods();
	$TSFE->determineId();
	$TSFE->initTemplate();
	$TSFE->getConfigArray();
	// @ToDo: for version 6.2:
	 \TYPO3\CMS\Core\Core\Bootstrap::getInstance();
	// for version 6.1: 
	//\TYPO3\CMS\Core\Core\Bootstrap::getInstance()->loadConfigurationAndInitialize();


	$TSFE->cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer');
	$TSFE->settingLanguage();
	$TSFE->settingLocale(); 

	/**
	* @var $objectManager \TYPO3\CMS\Extbase\Object\ObjectManager
	*/
	$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\CMS\Extbase\Object\ObjectManager');

	/**
	* Initialize Extbase bootstap
	*/
	$bootstrapConf['extensionName'] = $extensionName;
	$bootstrapConf['pluginName'] = $pluginName;
	$bootstrapConf['vendorName'] = $vendorName;
	$bootstrap = new TYPO3\CMS\Extbase\Core\Bootstrap();
	$bootstrap->initialize($bootstrapConf);
	$bootstrap->cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('tslib_cObj');

	/**
	* Build the request
	*/
	$request = $objectManager->get( 'TYPO3\CMS\Extbase\Mvc\Request' );
	
	$request->setControllerVendorName( $vendorName );
	$request->setcontrollerExtensionName( $extensionName );
	$request->setPluginName( $pluginName );
	$request->setControllerName( $controllerName );
	$request->setControllerActionName( $controllerActionName );
	$request->setArguments( $api );

	
	/**
	 * Authentification
	 */
	$authResult = \Z3\Z3Fasapi\Utility\Auth::authentificate($api);
	if( $authResult === TRUE){
		
		if( !array_key_exists('data', $api) ){
			die( $extensionName.'-ERROR. DATA: no data-parameter given' );
		}
		if( $api['data'] === '' ){
			die( $extensionName.'-ERROR. DATA: data-parameter empty' );
		}
		// @ToDo: for Future Configurability make this check depending on plugin.tx_z3fasapi.settings.format=json
		if( !\Z3\Z3Fasapi\Utility\Validator::isJson($api['data']) ){
			die( $extensionName.'-ERROR. DATA: no valid JSON given in Data-array' );
		}
		
		$response = $objectManager->create( 'TYPO3\CMS\Extbase\Mvc\ResponseInterface' );

		$dispatcher = $objectManager->get( 'TYPO3\CMS\Extbase\Mvc\Dispatcher' );
		$dispatcher->dispatch( $request, $response );

		echo $response->getContent();
				
		return;
		
	} else {
		die( $authResult );
	}

Auszüge aus meinem Controller

	/**
	 * eventRepo test...
	 * 
	 * @var \Z3\Z3Uuid\Domain\Repository\EventRepository
	 * @inject
	 */
	protected $eventRepository;
	
	/**
	 * dateRepo test...
	 * 
	 * @var \Z3\Z3Uuid\Domain\Repository\DateRepository
	 * @inject
	 */
	protected $dateRepository;


...



	
	/**
	 * apicall
	 */
	public function apiCallAction(){
		
		\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(TRUE,'is api call');
		$arguments = $this->request->getArguments();
		
		
		$this->apiStatus = array(
			'status' => FALSE,
			'msg' => 'nothing done'
		);
		
//		$exists = $this->eventRepository->findByUuid( 'e_2014003' );
		$exists = $this->eventRepository->findAll();
		
		\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($exists,'$exists in APicallAction');
		foreach($exists as $e){
			\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($e,'E in APicallAction');
			\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($e->getUuid(),'E->getUuid in APicallAction');
			\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($e->getUid(),'E->getUid in APicallAction');
			\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($e->getName(),'E->getName in APicallAction');
		}
		
		
		
		$this->apiRepository->importData($arguments['data']);
		
		// success-message
		if($this->nodeCount > 0){
			$this->apiStatus = array(
				'status' => TRUE,
				'msg' => $this->nodeCount. ' valid nodes processed'
			);
		}
		
		return $this->apiStatus;
		
	}
sven_de_ka ·

Problem gelöst:

natürlich sollte man die TCA noch laden...

	$cmsbootstrap = \TYPO3\CMS\Core\Core\Bootstrap::getInstance();
	$cmsbootstrap->loadConfigurationAndInitialize();
	$cmsbootstrap->loadExtensionTables();