# Mitgliedercheck bei Kundenregistration

**URL:** <https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502>\
**Category:** Programmierung\
**Created:** [11. August 2017 um 12:50 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502 "2017-08-11T12:50:29Z")\
**Posts on this page:** 12\
**Page:** 1

<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:** [11. August 2017 um 12:50 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/1 "2017-08-11T12:50:29Z")

</div>

Hallo liebes Forum,

ich bin erst vor kurzem auf dieses tolle Shopsystem gestoßen. Bin aber schon sehr begeistert. 🙂  
Ich bin für die Webseite des Verband Sonderpädagogik e.v. verantwortlich und nutze dort schon Contenido als CMS. Kenne mich recht gut mit PHP und Datenbanken aus. Grafik und Design überasse ich lieber anderen :))

Ich habe da auch direkt eine Frage, ob und wie ich die Kundenregistration bei Shopware anpassen kann:

Ich würde sehr gerne wenn ein Kunde eine Privatperson ist, die eventuell vorhandene Mitgliedsnummer abfragen und gegen eine Datenbank/CSV Datei checken ob der Kunde wirklich Mitglied ist und dem Kunden dann die Kundengruppe “Mitglied” mit den vergünstigten Preisen zuordnen.

Ist das prinzipiell Möglich ?

Könnt ihr mir die grobe Richtung aufzeichnen, dann kann ich mich da reinwühlen

&nbsp;

Danke und lieben Gruß aus Alsdorf

Georg

---

<div class="post-metadata">

**Author:** ![waldicom](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/waldicom/32/12881_2.png) [@waldicom](https://forum.shopware.com/u/waldicom)\
**Post date:** [11. August 2017 um 12:58 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/2 "2017-08-11T12:58:14Z")

</div>

\>&nbsp;Könnt ihr mir die grobe Richtung aufzeichnen, dann kann ich mich da reinwühlen

Klar. Wenn man den Service&nbsp;RegisterService dekoriert, kann man in dem eigene Service alle Prüfungen machen, die du möchtest und den Kunden anschließend in eine bestimmte Kundengruppe verschieben.

---

<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:** [11. August 2017 um 13:01 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/3 "2017-08-11T13:01:16Z")

</div>

Hi Waldicom,

danke für den Hinweis, dann werde ich mich mal in die Richtung schlau machen. Das ist dann aber wahrscheinlich nicht so einfach updatefest oder ?

Wäre es sinnvoller sich in die Pluginprogrammierung einzuarbeiten ?

G

---

<div class="post-metadata">

**Author:** ![waldicom](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/waldicom/32/12881_2.png) [@waldicom](https://forum.shopware.com/u/waldicom)\
**Post date:** [11. August 2017 um 13:08 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/4 "2017-08-11T13:08:52Z")

</div>

Klar. Sehr guter Einstieg ist hier:&nbsp;[Developing plugins](https://developers.shopware.com/plugin-guide/)

---

<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:** [11. August 2017 um 13:51 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/5 "2017-08-11T13:51:22Z")

</div>

Ach, hätte ich bei objektorientierter Programmierung nur besser aufgepasst 🙂

Ich hätte jetzt einfach von der Klasse RegisterService geerbt und die entsprechenden Methoden überschrieben. Wusste nicht das das Dekorieren heißt

Aber ok, der Weg zeichnet sich ab:

- Versthen wie der RegisterService&nbsp;(“engine/Shopware/Bundel/AccountBundle/Servide/RegisterService.php”) funktioniert

- Plugin in der 5.2 Methode&nbsp;

- Dekorieren &nbsp;des RegisterService&nbsp;

Gut das Wochenende ist 🙂

&nbsp;

---

<div class="post-metadata">

**Author:** ![langnickel](https://avatars.discourse-cdn.com/v4/letter/l/3ec8ea/32.png) [@langnickel](https://forum.shopware.com/u/langnickel)\
**Post date:** [14. August 2017 um 13:26 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/6 "2017-08-14T13:26:29Z")

</div>

> [@CTSchorsch schrieb:](https://forum.shopware.com/profile/27005/CTSchorsch "CTSchorsch")
> 
> Ach, hätte ich bei objektorientierter Programmierung nur besser aufgepasst ![:)](https://dub1.discourse-cdn.com/flex013/resources/emoji/smile.png ":)")
> 
> Ich hätte jetzt einfach von der Klasse RegisterService geerbt und die entsprechenden Methoden überschrieben. Wusste nicht das das Dekorieren heißt
> 
> &nbsp;

In&nbsp;[object-oriented programming](https://en.wikipedia.org/wiki/Object-oriented_programming "Object-oriented programming"), the&nbsp; **decorator pattern** &nbsp;(also known as Wrapper, an alternative naming shared with the&nbsp;[Adapter pattern](https://en.wikipedia.org/wiki/Adapter_pattern "Adapter pattern")) is a&nbsp;[design pattern](https://en.wikipedia.org/wiki/Design_pattern_(computer_science) "Design pattern (computer science)")&nbsp;that allows behavior to be added to an individual&nbsp;[object](https://en.wikipedia.org/wiki/Object_(computer_science) "Object (computer science)"), either statically or dynamically, without affecting the behavior of other objects from the same&nbsp;[class](https://en.wikipedia.org/wiki/Class_(computer_science) "Class (computer science)").[[1]](https://en.wikipedia.org/wiki/Decorator_pattern#cite_note-1)&nbsp;The decorator pattern is often useful for adhering to the&nbsp;[Single Responsibility Principle](https://en.wikipedia.org/wiki/Single_responsibility_principle "Single responsibility principle"), as it allows functionality to be divided between classes with unique areas of concern.[[2]](https://en.wikipedia.org/wiki/Decorator_pattern#cite_note-2)&nbsp; ([https://en.wikipedia.org/wiki/Decorator\_pattern](https://en.wikipedia.org/wiki/Decorator%5C_pattern))

---

<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:** [15. August 2017 um 09:19 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/7 "2017-08-15T09:19:51Z")

</div>

Ja, danke langnickel, ich sag ja, hätte ich da mal besser zugehört 🙂

Zurück zu meinem Problem:

Würde es nicht reichen den Validator anzupassen ? Da werden ja eh schon Felder geprüft. Oder bekomme ich das zusätzliche Feld nur über den RegisterService rein ?

Georg

---

<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:** [21. August 2017 um 15:07 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/8 "2017-08-21T15:07:18Z")

</div>

Hallo zusammen,

ich bin jetzt schon so weit, das ich die Mitgliedsnummer als zusätzliches Kundenattribut bei der Registrierung Abfrage und in die Datenbank eintragen kann. Auch im Backend kann dieses Feld bearbeitet werden. Ich habe eine Plugin 5.2 Struktur gewählt.

meine Bootstrap sieht so aus:

```
container->get('shopware_attribute.crud_service');
            $service->update('s_user_attributes', 'ctech_clubnumber', 'string', [
                    'label' => 'Mitgliedsnummer',
                    'displayInBackend' => true
                ]);

  Shopware()->Models()->generateAttributeModels(
             array('s_user_attributes') );
    }

    public static function getSubscribedEvents()
    {
            return ['Enlight_Controller_Action_PostDispatchSecure_Frontend' => 
                      'onFrontendPostDispatch',
            ];
    }

    public function onFrontendPostDispatch(\Enlight_Controller_ActionEventArgs $args)
    {
            $args->getSubject()->View()->addTemplateDir($this->getPath() . '/Resources/Views');
        }
}
?>

```

unter Resources/Views habe ich die entsprechend tpls abgelegt. Soweit so gut 🙂

Jetzt stehe ich aber auf dem Schlauch, wo ich meine RegisterService.php ablegen soll ? Im Hauptverzeichnis des Plugins ? Oder muß ich die Bundle/AccountBundle Struktur übernehmen ?

Ich würde auch gerne erst mal einfach die Originalfunktionalität übernehmen. Ginge das mit folgender Klasse ?

```
service = $ service;
    }

}
?>

```

und folgender Resources/service.xml:  
&nbsp;

&nbsp;

Lieben Gruß

Georg

---

<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:** [5. September 2017 um 13:27 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/9 "2017-09-05T13:27:53Z")

</div>

Hallo zusammen,

ich bin ein kleines Stückchen weiter 🙂

Mein Plugin läuft soweit, dass ich den RegisterServie abgreifen kann und meine eigene register Methode aufgerufen wird:

```
public function register (Shop $shop, Customer $customer, Address $billing, Address $shipping = null)
        {
                $customerAttris = $customer->getAttribute() ;
                $clubnumber=$customerAttris->getCtechClubnumber(1);
           
                // TODO: Mitgliedsnummer gegen csv checken

                if ($istMitglied) {
                    //TODO Plugin config für GroupID
                    $group = Shopware()->Models()->find('Shopware\Models\Customer\Group', 3);
                    $customer->setGroup($group);
                    $this->service->register($shop, $customer, $billing, $shipping);
                } else {
                   //TODO Zeige Fehler das Mitgliedsnummer unbekannt
                }
}

```

Wie kann ich im Fehlerfall, also der Kunde ist kein Mitglied, den Fehler an das Formular geben ? Ich hab versucht mich durch die Validatoren zu kämpfen, aber wüßte jetzt auch nicht,wie ich die Prüfung da untergebracht bekäme

Georg

&nbsp;

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [6. September 2017 um 08:44 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/10 "2017-09-06T08:44:31Z")

</div>

Hallo Georg,

ich glaube an der Stelle gar nicht. Die Fehlerbehandlung findet im Register Controller schon vorher statt. Und zwar in Zeile 116:

```
        $errors = [
            'personal' => $this->getFormErrors($customerForm),
            'billing' => $this->getFormErrors($billingForm),
            'shipping' => []
        ];

```

Ich hoffe das hilft dir etwas weiter.

---

<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:** [6. September 2017 um 11:13 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/11 "2017-09-06T11:13:24Z")

</div>

Hi,

ja, aber an welcher Stelle werden die Fehler im $customerForm gesetzt ? Wie ist die Verbindung zwischen Service und Controller ?

Im Service wird ja der Validator aufgerufen und der setzt ja auch einen Fehler wenn die Emailadresse schon bekannt ist. Aber ich seh nicht wo 🙂

Georg

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [8. September 2017 um 09:09 UTC](https://forum.shopware.com/t/mitgliedercheck-bei-kundenregistration/47502/12 "2017-09-08T09:09:09Z")

</div>

Sorry. So tief bin ich da auch nicht drin.
