Zum Inhalt springen

Extbase Action im anderen Plugin starten

Erstellt am 7. Juli 2010 · 1 Antwort · letzte Antwort am 7. Juli 2010

Tags: Frage

ede32 ·

Hi,

versuche gerade ne kleine Extension für die Uni zu schreiben und ich bekomme folgendes nicht hin:

Gegeben:
- Eine Extension mit zwei Plugins ('Pi1' und 'Pi2')
Die Extension hat die Controller C1 mit den ControllerAction showAction(id = NULL) und selectAction(id) und C2 mit dem ControllerAction showByIdAction(id)
- Beide Plugins sind auf einer Seite eingebunden.

nun löse ich bei Pi1 die Action selectAction(id) aus. Nun soll für das Pi1 die showAction(id) aufgerufen werden und für das Pi2 die selectAction(id). Wie bekomme ich das hin?

Aktuell hab ich folgendes:

public function selectAction($id) {				
		$this->uriBuilder = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Routing_UriBuilder');
		$this->uriBuilder->setRequest($this->request);
		$uri = $this->uriBuilder->reset()
			->uriFor('showById', $this->request->getArguments(), 'C2', $this->request->getControllerExtensionName(), 'Pi2');
		$this->redirectToURI($uri);
}

Leider wird dann natürlich nicht mehr die show() in Pi1 aufgerufen.

$this->forward('showById', 'C2', NULL, array('id' => $id));

bietet wiederrum keine Angabe des Ziel-Plugins (Ergebnis wird in Pi1 statt in Pi2 angezeigt)

Wie kann ich da vorgehen? Leider hab ich keine große Erfahrung mit der API. Würd mich freuen wenn mir jemand da weiterhelfen kann.

Gruß,
Ede

ede32 ·

Habs hinbekommen.

public function selectAction($id) {	
     $pi1Prfx = strtolower('tx_' . $this->request->getControllerExtensionName() . '_' . 'pi2');
	$arg = array( $pi1Prfx => array('id' 	=> $id,
									'controller' => 'C2',
									'action' 	=> 'showById'));
	
	$this->uriBuilder = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Routing_UriBuilder');
	$this->uriBuilder->setRequest($this->request);
	$uri = $this->uriBuilder
		->setArguments($arg)
		->uriFor('show', array('id' => $id));
	$this->redirectToURI($uri);
}

Keine Ahnung ob das der saubere Weg ist, aber es funktioniert 🙂
schade das uriFor() immer jeden Argument das selbe prefix (und somit das selbe plugin) zuweist. Über setArguments() und dort den eigenen prefix vorher erzeugen gehts nun 🙂

Gruß