Hallo liebe Shopware-Community,
ich stehe momentan vor dem Problem, dass ich aus einem meiner Subscriber (welcher eine Methode eines Shopware-Controllers via ::replace ersetzt) eine andere, protected Methode des zugehörigen Shopware-Controllers aufrufen muss. Schauen wir uns mal etwas Code zur Klarheit an.
-
Der Subscriber ersetzt folgende Methode:
public static function getSubscribedEvents() {
return [
‘Shopware_Controllers_Frontend_Register::saveRegisterAction::replace’ => ‘replaceSaveRegisterAction’,
]
} -
Der grobe Aufbau dieser Methode ist wie folgt (Schnippsel):
public function replaceSaveRegisterAction(\Enlight_Hook_HookArgs $arguments) {
$this->controller = $arguments->getSubject();
$request = $this->controller->Request();
$view = $this->controller->View();
/** etc.pp. /
$customerForm = $this->createCustomerForm($data[‘register’][‘personal’]);
/* und noch weiterer Code … */
}
-
So. Jetzt kommt die eigentliche Stelle in der Methode
private function createCustomerForm(array $data) {
$customer = new Customer();/** Hier ist das, was ich erreichen will - klappt so aber nicht */
$form = $this->controller->executeParent(‘createForm’, [PersonalFormType::class, $customer]);
$form->submit($data);return $form;
}
In dieser Methode möchte ich also die Methode createForm(…) des “eigentlichen” Controllers Shopware_Controllers_Frontend_Register (genauer gesagt liegt diese Methode sogar noch eine Ebene höher in der Klasse Enlight_Controller_Action , von welcher der Shopware-Controller ableitet) aufrufen. Ist so etwas in einem Hook überhaupt möglich? So wie ich das während des Debuggings gesehen habe, könnte ich via executeParent(…) nur die direkt ersetzte Methode saveRegisterAction aufrufen.
Wenn Ihr noch mehr Infos braucht, einfach Bescheid sagen. Vielen Dank schonmal.