Zum Inhalt springen

Persistence Mapping CLI

Erstellt am 10. Dezember 2011 · 3 Antworten · letzte Antwort am 14. Dezember 2011

Tags: Frage

Tarta ·

Hallo zusammen,

ich suche jetzt schon etwas länger, scheinbar lässt sich aber zu diesem Problem nichts finden. Falls jemand eine Idee oder einen Ansatzpunkt hätte, würde ich mich sehr freuen:

Meine Extension läuft mit extbase/fluid unter Typo3 4.5. Es gibt einen CSV-Export, der im Backend auch einwandfrei funktioniert. Für eins der Objekte (Mitarbeiter) gibt es ein Mapping auf die Tabelle fe_users. Wenn ich die gleiche Funktion über das Command Line Interface (CLI) aufrufe, gibt das System die folgende Fehlermeldung aus:

exception 'Tx_Extbase_Persistence_Storage_Exception_SqlError' with message 'Table 'meinedb.tx_csmeintool_domain_model_mitarbeiter' doesn't exist: SELECT  tx_csmeintool_domain_model_mitarbeiter.* FROM .....

Das System greift also scheinbar nicht auf das folgende Typoscript zu:

module.tx_csmeintool {
	persistence {
		storagePid = {$plugin.tx_csmeintool.persistence.storagePid}
		classes.Tx_CsMeintool_Domain_Model_Mitarbeiter.mapping.tableName = fe_users
  }
}

(plugin.tx_csmeintool existiert ebenfalls mit gleichen Einstellungen)

Vor Einführung des Mappings funktionierte auch das CLI korrekt, so dass der Fehler schon relativ klar eingegrenzt ist.

M.E. müsste entweder die Typoscript Konfiguration nachgeladen oder das Mapping sonst irgendwie dem Persistence Manager mitgeteilt werden. Leider habe ich keine Idee wie ich das bewerkstelligen kann.

Vielen Dank schon im Voraus

Stefan

rlp_immigrant ·

Hi Stefan,

lädst du innerhalb des CLI Skriptes denn das Extbase Framework?
Arbeite momentan gerade an dem Schedulerskript was ja im Prinzip nichts anderes ist. Ich rufe in dem Skript ein vorhandenes BackendModul auf.
Das sieht dann so aus:

	public function execute() {
                # Workaround da beim CLI Request keine Request Methode übergeben werden kann
                $_SERVER['REQUEST_METHOD'] = ($_SERVER['REQUEST_METHOD'] )?$_SERVER['REQUEST_METHOD'] : 'GET';
                #Extbase Framework laden
                $bootstrap = t3lib_div::makeInstance('Tx_Extbase_Core_Bootstrap');
                #Modul aufrufen
                $bootstrap->callModule('MODULKEY');
		return TRUE;
	}

Funktioniert super. Du kannst natürlich auch ein Frontendplugin aufrufen. Dann musst du halt $bootstrap->run(...) machen.

Grüße
Alex

Tarta ·

Danke für Eure Antworten. In etwa die Lösung hatte ich auch in der Typo3 MVC Mailingliste gefunden und dann ein bisschen angepasst. Evtl. ist allerdings noch ein bisschen Overhead drin, es erfüllt aber jetzt den Zweck. Es macht doch immer Sinn einfach mal zu schauen wie Typo3 das Framework überhaupt lädt 😉

//12.12.2011 
//Konfiguration setzen um eigenes Framework für CLI Export aufzubauen.
//Ohne eigenes Framework wurde das Table Mapping von Mitarbeiter auf fe_users nicht bewerkstelligt und es kam zu einer SQL Fehlermeldung
		$configuration = array(
			'extensionName' => "CsMeintool",
			'pluginName' => "mod1",
			'settings' => '< plugin.tx_csmeintool.settings',
			'persistence' => '< plugin.tx_csmeintool.persistence',
			'view' => '< plugin.tx_csmeintool.view',
			'_LOCAL_LANG' => '< plugin.tx_csmeintool._LOCAL_LANG'			
		);	
		
		//Ohne die Manipulation des GET-Arrays wird die Action nicht korrekt gestartet
		$_SERVER['REQUEST_METHOD'] = 'GET';
		$_GET['tx_csmeintool_pi1']['controller'] = 'Backend';
		$_GET['tx_csmeintool_pi1']['action'] = 'mailExport';
		$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']['CsMeintool']['modules']['mod1']['controllers'] = array('Backend' => 
																															array('actions' => array('mailExport')),
																															);
		//Framework konstruieren
		$framework = t3lib_div::makeInstance(Tx_Extbase_Core_Bootstrap);
		//Action Durchlauf starten
		$result = $framework->run('',$configuration);