Hallo, ich entwickle gerade einen eigenen Controller, in dem z. B. die Email des Kunden geändert werden kann. Um die E-Mail auszulesen nutze ich die selbsgeschriebene Funktion getCustomerEmail($customerId) und um die Daten wieder zurück zu schreiben setCustomerEmail($customerId, $email). Dabei verwende ich den Doctrine Query Builder, das funktioniert auch soweit. Das scheint aber nicht der vorgesehene Weg zu sein. Wie kann die gewünschte Funktionalität mit den Funktionen getEmail() und setEmail(string $email) des Shopwaremodels \ Shopware \Models \Customer \Customer realisiert werden? Auch wird der User im Frontend nach jeder Änderung ausgeloggt. Wie kann ich das verhindern? Verwende Shopware 4.0.6 RC2. Das ganze Plugin downloaden. Meincontroller.php [code]<?php class Shopware_Controllers_Frontend_Meincontroller extends Enlight_Controller_Action
{
protected $admin;
public function init()
{
$this->admin = Shopware()-\>Modules()-\>Admin(); $this-\>View()-\>addTemplateDir(dirname(\_\_FILE\_\_) . "/../../Views/"); $this-\>View()-\>sUserData = $this-\>admin-\>sGetUserData(); $this-\>View()-\>loadTemplate("frontend/index.tpl"); } /\* Es besteht auch die Möglichkeit nach erfolgreicher Speicherung \* der Daten auf einen eine eigene Action zu verweisen, die ein \* eigenes Template lädt. Die Weiterleitung ist weiter unten auskommentiert public function successAction(){ $this-\>View()-\>loadTemplate("frontend/success.tpl"); $this-\>View()-\>sSuccess = true; } \*/ public function indexAction() { $customerModel = Shopware()-\>Models()-\>getRepository('Shopware\Models\Customer\Customer'); $customerModel-\>findOneBy(array('id' =\> intval($userID = Shopware()-\>Session()-\>sUserId))); $this-\>View()-\>sCustomerMail = $this-\>getCustomerEmail(Shopware()-\>Session()-\>sUserId); if ($this-\>Request()-\>getPost("sCustomerMail")) { $variables["sError"] = false; $validator = new Zend\_Validate\_EmailAddress(); if (!$validator-\>isValid($this-\>Request()-\>getPost("sCustomerMail"))) { $variables["sError"] = true; } if ($variables["sError"] == false) { if ($this-\>Request()-\>getPost("sCustomerMail")) { $this-\>setCustomerEmail(Shopware()-\>Session()-\>sUserId, $this-\>Request()-\>getPost("sCustomerMail")); } $this-\>View()-\>sSuccess = true; /\* Siehe sucessAction() \* $url = $this-\>Front()-\>Router()-\>assemble(array('controller' =\> 'Meincontroller', 'action' =\> 'success')); $this-\>redirect($url); \*/ } else { $this-\>View()-\>sError = true; $this-\>View()-\>sCustomerMail = $this-\>Request()-\>getPost("sCustomerMail"); } } } function getCustomerEmail($customerId) { //creates an empty query builder object $builder = Shopware()-\>Models()-\>createQueryBuilder(); //add the select and from path for the query $builder-\>select(array('customer')) -\>from('Shopware\Models\Customer\Customer', 'customer') -\>where('customer.id = :customerId') -\>setParameter('customerId', $customerId) -\>setFirstResult(0) -\>setMaxResults(1); //get generated query object from the builder object $query = $builder-\>getQuery(); $customer = $query-\>getOneOrNullResult( \Doctrine\ORM\AbstractQuery::HYDRATE\_ARRAY ); $customerEmail = $customer['email']; return $customerEmail; } function setCustomerEmail($customerId, $email) { $query = Shopware()-\>Models()-\>createQueryBuilder(); $queryupdate = $query-\>update('Shopware\Models\Customer\Customer', 'customer') -\>set('customer.email', $query-\>expr()-\>literal($email) ) -\>where('customer.id = ?1') -\>setParameter(1, $customerId) -\>getQuery(); $update = $queryupdate-\>execute(); // oder alternativ // $update = Shopware()-\>Db()-\>query( // "UPDATE s\_user SET email = ? WHERE id = ?" // , array($email, $customerId) // ); return true; } } [/code]