# Account Controller um Action erweitern \*best practice\*

**URL:** <https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769>\
**Category:** Programmierung\
**Created:** [9. Juli 2015 um 12:44 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769 "2015-07-09T12:44:39Z")\
**Posts on this page:** 17\
**Page:** 1

<div class="post-metadata">

**Author:** ![m0rb](https://avatars.discourse-cdn.com/v4/letter/m/8491ac/32.png) [@m0rb](https://forum.shopware.com/u/m0rb)\
**Post date:** [9. Juli 2015 um 12:44 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/1 "2015-07-09T12:44:39Z")

</div>

Hallo zusammen, ich habe zwar grob ein paar Threads zu dem Thema gefunden, aber die waren meist recht alt und nicht ganz das was ich wollte. Mein Ziel ist es den Account-Controller um eine oder mehrere Actions zu erweitern. Wie ist die optimale Vorgehensweise? Ich hatte das Ganze in etwa wie folgt versucht: Account-Controller “überschreiben” ` $this-\>subscribeEvent( 'Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_Account', 'onGetAccountController' ); ` ` public function onGetAccountController() { return $this-\>Path() . 'Controllers/Frontend/ExtAccount.php'; } ` Und dann den eigenen Controller von der Account Klasse erben lassen und eigene Actions hinzufügen. Hat so aber nicht funktioniert und ich habe meine Zweifel, ob das so im Sinne des Erfinders ist. Besten Dank schonmal für eure Hilfe!

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [9. Juli 2015 um 12:53 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/2 "2015-07-09T12:53:14Z")

</div>

Warum möchtest du das überhaupt tun?! Gib mal bitte ein sinnvolles praktisches Beispiel. Viele Grüße

---

<div class="post-metadata">

**Author:** ![m0rb](https://avatars.discourse-cdn.com/v4/letter/m/8491ac/32.png) [@m0rb](https://forum.shopware.com/u/m0rb)\
**Post date:** [9. Juli 2015 um 12:59 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/3 "2015-07-09T12:59:39Z")

</div>

Hauptziel ist es, dass bestimmte Nutzer (z.B. eines Unternehmens) Einkäufer anlegen können. Um diese Einkäufer zu verwalten, sollen Sie im „Mein Konto“-Bereich einen zusätzlichen Navigationspunkt bekommen über den sie diese verwalten können. Da es sich um ein Account-Thema handelt, würde ich das Ganze auch gern über den entsprechenden Controller laufen lassen und nicht mit einem separaten arbeiten.

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [9. Juli 2015 um 13:25 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/4 "2015-07-09T13:25:48Z")

</div>

Warum sollte das zwingend in den Account controller müssen? Es ist vollkommen legitim, wenn die Logik deines Plugins auch in deinem Plugin controller steckt und dementsprechend angesprochen wird. Viele Grüße

---

<div class="post-metadata">

**Author:** ![m0rb](https://avatars.discourse-cdn.com/v4/letter/m/8491ac/32.png) [@m0rb](https://forum.shopware.com/u/m0rb)\
**Post date:** [9. Juli 2015 um 13:59 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/5 "2015-07-09T13:59:21Z")

</div>

Ja das mag sein, aber ich würde dennoch gern wissen, ob und wie die Erweiterung vorhandener Controller funktioniert.

---

<div class="post-metadata">

**Author:** ![benblub](https://avatars.discourse-cdn.com/v4/letter/b/ebca7d/32.png) [@benblub](https://forum.shopware.com/u/benblub)\
**Post date:** [9. Juli 2015 um 15:22 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/6 "2015-07-09T15:22:44Z")

</div>

[http://community.shopware.com/Shopware- … 0\_866.html](http://community.shopware.com/Shopware-4-Controller%5C_detail%5C_970%5C_866.html)

---

<div class="post-metadata">

**Author:** ![dirk\_designverign](https://avatars.discourse-cdn.com/v4/letter/d/ec9cab/32.png) [@dirk\_designverign](https://forum.shopware.com/u/dirk_designverign)\
**Post date:** [9. Juli 2015 um 15:33 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/7 "2015-07-09T15:33:19Z")

</div>

Ich dachte man könnte den nicht vorhandenen Methoden hooken, geht aber wohl doch nicht ☹

---

<div class="post-metadata">

**Author:** ![benblub](https://avatars.discourse-cdn.com/v4/letter/b/ebca7d/32.png) [@benblub](https://forum.shopware.com/u/benblub)\
**Post date:** [9. Juli 2015 um 16:03 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/8 "2015-07-09T16:03:58Z")

</div>

Ja das würde gehen, für das angesprochene Thema wäre ein eigener Controller doch ok, welcher einfach als post/pre dispatch beim Account Controller gefeuert wird. [http://community.shopware.com/Shopware- … html#Hooks](http://community.shopware.com/Shopware-4-Events-und-Hooks%5C_detail%5C_981%5C_866.html#Hooks)

---

<div class="post-metadata">

**Author:** ![dirk\_designverign](https://avatars.discourse-cdn.com/v4/letter/d/ec9cab/32.png) [@dirk\_designverign](https://forum.shopware.com/u/dirk_designverign)\
**Post date:** [9. Juli 2015 um 16:44 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/9 "2015-07-09T16:44:30Z")

</div>

Vielleicht könnte man den dispatch kapern: ` $this-\>subscribeEvent( 'Shopware\_Controllers\_Frontend\_Account::dispatch::replace', 'myDispatch' );` Und dann seine eigenen Actions ausführen: `public function myDispatch(Enlight\_Hook\_HookArgs $args) { /\*\* @var Enlight\_Controller\_Action $subject \*/ $subject = $args-\>getSubject(); $action = $args-\>get('action'); if ($action == "meineEigeneAction") { $subject-\>executeParent('preDispatch'); if ($subject-\>Request()-\>isDispatched()) { $this-\>meineEigeneAction($args); $subject-\>executeParent('postDispatch', array()); } } else { $subject-\>executeParent( $args-\>getMethod(), $args-\>getArgs() ); } }` Dabei vielleicht drauf achten, dass man weitergeleitet wird, wenn man nicht eingeloggt ist und die Action nicht ‚login‘, ‚logout‘, ‚password‘, ‚ajax\_login‘ oder ‚ajax\_logout‘ heißt.

---

<div class="post-metadata">

**Author:** ![Heiner\_Lohaus](https://avatars.discourse-cdn.com/v4/letter/h/b5a626/32.png) [@Heiner\_Lohaus](https://forum.shopware.com/u/Heiner_Lohaus)\
**Post date:** [9. Juli 2015 um 17:20 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/10 "2015-07-09T17:20:17Z")

</div>

Ja, das geht doch ganz einfach mit einem Event: (ohne Hooks!) Siehe: [http://community.shopware.com/Shopware- … er\_Actions](http://community.shopware.com/Shopware-4-Events-und-Hooks%5C_detail%5C_981.html#Controller%5C_Actions) Hooks auf Controller empfehlen wir überhaupt nicht bzw. braucht man auch nicht 🙂 Gruß Heiner

---

<div class="post-metadata">

**Author:** ![tremonti](https://avatars.discourse-cdn.com/v4/letter/t/13edae/32.png) [@tremonti](https://forum.shopware.com/u/tremonti)\
**Post date:** [20. November 2015 um 08:38 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/11 "2015-11-20T08:38:27Z")

</div>

Ich stehe immer noch vor der Lösung dieser Aufgabe: ich möchte innerhalb des Accounts meines Shops eine neue Seite erschaffen, welche Kundenspezifische Daten ausgeben. Die Soll mit einer neuen Action innerhalb des Account Controllers passieren. [http://www.meineUrl.de/account/accountstatistics](http://www.meineUrl.de/account/accountstatistics) Der Aufruf Funktioniert auch soweit, nur leider wird der Controller ignoriert: folgendes steht in der Funktion install: ` $this-\>subscribeEvent('Enlight\_Controller\_Action\_Frontend\_Account\_AccountStatistics', 'onGetAccountControllerAction'); ` die Funktion onGetAccountControllerAction ` public function onGetAccountControllerAction(Enlight\_Event\_EventArgs $args) { $subject = $args-\>getSubject(); $request = $subject-\>Request(); $action = $request-\>getActionName(); error\_log("action: ".$action); // output:accountstatistics error\_log("function: onGetControllerPath"); $path\_to\_controller=$this-\>Path().'Controllers/Frontend/Account/AccountStatistics.php'; return $path\_to\_controller; } ` Der Controller in der AccountStatistics.php: ` class Shopware\_Controllers\_Frontend\_AccountStatistics extends Enlight\_Controller\_Action { public function init(){ error\_log("init"); $this-\>View()-\>addTemplateDir($this-\>Path().'Views/frontend/account/'); } public function indexAction(){ error\_log("index\_Action Fallback"); $this-\>View()-\>addTemplateDir($this-\>Path().'Views/frontend/account/'); $this-\>View()-\>loadTemplate('accountstatistics.tpl'); } public function accountstatisticsAction(){ error\_log("accountstatisticsAction"); $this-\>View()-\>addTemplateDir($this-\>Path().'Views/frontend/account/'); $this-\>View()-\>loadTemplate('accountstatistics.tpl'); } ` Die class Shopware\_Controllers\_Frontend\_AccountStatistics wird komplett ignoriert. Daher kommt dort auch nicht irgendein error\_log zustande. Kann jemand helfen ?

---

<div class="post-metadata">

**Author:** ![daniel.sotzko](https://avatars.discourse-cdn.com/v4/letter/d/7993a0/32.png) [@daniel.sotzko](https://forum.shopware.com/u/daniel.sotzko)\
**Post date:** [21. Januar 2016 um 14:36 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/12 "2016-01-21T14:36:02Z")

</div>

Hat das jemand hinbekommen?

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [22. Januar 2016 um 06:52 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/13 "2016-01-22T06:52:18Z")

</div>

Hi, das Controller-Dispatching in engine/Library/Enlight/Controller/Action.php:153 sollte euch (wie HL schon gesagt hat) tatsächlich erlauben, eigene Actions nach diesem Schema zu registrieren: “Enlight\_Controller\_Action\_Frontend\_CONTROLLER\_ACTION”. Auch wenn das in anderen Systemen wohl üblich ist: Es wurde ja bereits gesagt, dass wir eigentlich eher dazu raten, eigene Controller anzulegen, die ihr dann bspw. via Ajax ansprecht. Das “virtuelle” Hinzufügen von Actions zu existierenden Controllern ist in SW kein übliches Vorgehen, wenn ihr also drum herum kommt, würde ich dazu raten, es zu vermeiden. Besten Gruß, Daniel

---

<div class="post-metadata">

**Author:** ![Thomas](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomas/32/8167_2.png) [@Thomas](https://forum.shopware.com/u/Thomas)\
**Post date:** [12. April 2017 um 06:30 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/14 "2017-04-12T06:30:42Z")

</div>

Mit den folgenden Snippet hat es bei mir einwandfrei funktioniert.&nbsp;:-)

```
public static function getSubscribedEvents()
{
    return [
        'Enlight_Controller_Action_Frontend_Account_Test' => 'onAccountTestAction'
    ];
}

```

&nbsp;

```
public function onAccountTestAction(\Enlight_Event_EventArgs $args)
{
    /** @var Enlight_Controller_Action $subject */
    $subject = $args->getSubject();

    $subject->View()->loadTemplate( __DIR__. '/../../Views/frontend/account/test.tpl');

    $args->setReturn(true);
    return true;
}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![CTSchorsch](https://avatars.discourse-cdn.com/v4/letter/c/ea666f/32.png) [@CTSchorsch](https://forum.shopware.com/u/CTSchorsch)\
**Post date:** [28. August 2017 um 06:38 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/15 "2017-08-28T06:38:17Z")

</div>

Hallo Thomas,

das ist ziemlich genau das was ich brauche. Ich würde allerdings gerne noch auf die Funktionen des core-Controllers zugreifen. In meinem Fall würde ich gerne den Register Controller um eine weitere ajaxValidate Action erweitern. Die beiden vorhandenen Funktionen greifen ja &nbsp;z.B. auf die getPostData() Funktion zu. Kann ich das in meiner eigenen ControllerAction Funktion irgendwie erreichen ?

Gruß  
Georg

---

<div class="post-metadata">

**Author:** ![Thomas](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomas/32/8167_2.png) [@Thomas](https://forum.shopware.com/u/Thomas)\
**Post date:** [28. August 2017 um 07:08 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/16 "2017-08-28T07:08:51Z")

</div>

Auf die&nbsp;getPostData() kannst Du nicht zugreifen da diese private ist.

---

<div class="post-metadata">

**Author:** ![CTSchorsch](https://avatars.discourse-cdn.com/v4/letter/c/ea666f/32.png) [@CTSchorsch](https://forum.shopware.com/u/CTSchorsch)\
**Post date:** [28. August 2017 um 07:14 UTC](https://forum.shopware.com/t/account-controller-um-action-erweitern-best-practice/28769/17 "2017-08-28T07:14:00Z")

</div>

Hi Thomas,

danke für die flotte Antwort. Was ist denn deine Empfehlung um ein weiteres Feld überprüfen zu können ?

&nbsp;

Gruß

Georg
