Andere Controller Action aus API Controller aufrufen

Hallo,

aktuell erweitere ich ein 5.2 Plugin um eine API Schnittstelle. Dieses soll bei einer Anfrage eines externen Tools den Bestellstatus setzen, die Versandbestätigungs Mail versenden und noch ein paar zusätzliche Dinge erledigen. Die APi Funktioniert auch soweit, allerding benötige ich Zugriff auf einen anderen Controller im selben Plugin, welcher für einige dieser Vorgänge zuständig ist.

Ist es möglich den Controller in der service.xml als Service zu defninieren und so per $this->get(’’) darauf zuzugreifen?
Ich habe es auch bereits per forward() probiert, da findet er aber den Controller nicht.

Hat jemand eine Idee wie ich es realisieren könnte?

Hi Tino,

meines Empfindes nach, wäre es die sauberste Lösung die Funktionalität welche Du in dem anderen Controller hast in einen Service auszulagern, auf welchen Du dann von beiden Controllern aus zugreifst.

Ein forward bzw redirect sollte meines Erachtens nach zwar auch funktionieren dabei gilt aber darauf zu achten, dass sich die Übergabewerte der beiden Funktionen massiv unterscheiden. Hast Du Dir mal die Url auf welche Du forwarden willst genauer angeschaut, und diese durch manuelles Aufrufen eventuell validiert?

Gruß

Daniel

 

 

Danke für die Antwort mowlwurf,

wäre auch mein nächster Versuch gewesen, die Funktionalität der action des 2ten Controllers in einen Service auszulagern. Ich dachten nur das es in Shopware eine ähnliche Möglichkeit wie in Symfony gibt, da man dort einen Controller direkt als Service definieren und somit von außerhalb ansprechen kann.

Beim forward() in Shopware muss man meines Wissens nach doch die action und den controllerpath übergeben, per url habe ich es noch nicht versucht.

Ich stimme @mowlwurf zu. Du solltest den Code in einen Service auslagern. Nichts destotrotz kann man auch einen Controller aufrufen:

$checkout = \Enlight_Class::Instance('\Shopware_Controllers_Frontend_Checkout', [$this->Request(), $this->Response()]);
$checkout->preDispatch(); // TODO on errors: maybe fire some events at this time
$sPayment = $checkout->getSelectedPayment();