Backend Controller erweitern

Hallo, wir sind gerade dabei das bestehende Gutschein-Modul (Voucher) um neue Funktionen zu erweitern. Hierbei wurde bereits erfolgreich ein neuer Gutschein-Typ hinzugefügt. Dieser Typ soll nun die Möglichkeit besitzen, einen Partner aus dem Partnerprogramm-Modul (Affiliate Program) mit diesem Gutschein-Typ zu Verknüpfen. Das Layout hierfür beinhaltet eine Combobox über die dann der Backend-Benutzer aus einer Liste von Partnern genau einen auswählen kann: // Plugins/Local/Backend/"Unser Plugin-Name"/Views/backend/voucher/view/voucher/voucher\_partner/base\_configuration.js var partner = Ext.create('Ext.form.ComboBox', { xtype: 'combobox', name: 'partners', fieldLabel: 'Partner', store: Ext.create('Shopware.apps.Voucher.store.Partner').load(), valueField: 'id', displayField: 'text', mode: 'local', editable: false, helpText: 'Wählen Sie hier den Partner aus.', hidden: true }); Unser Data Store: // Plugins/Local/Backend/"Unser Plugin-Name"/Views/backend/voucher/store/partner.js Ext.define('Shopware.apps.Voucher.store.Partner', { alternateClassName: 'Shopware.store.Partner', extend: 'Ext.data.Store', storeId: 'base.Partner', autoLoad: false, remoteSort: true, remoteFilter: true, model : 'Shopware.apps.Voucher.model.Partner', proxy: { type: 'ajax', url: '{url action="getList"}', reader: { type: 'json', root: 'data', totalProperty: 'total' } } }).create(); Unser Data Model: // Plugins/Local/Backend/"Unser Plugin-Name"/Views/backend/voucher/model/partner.js //{block name="backend/voucher/model/partner"} Ext.define('Shopware.apps.Voucher.model.Partner', { alternateClassName: 'Shopware.model.Partner', extend: 'Shopware.data.Model', idProperty : 'id', fields: [//{block name="backend/voucher/model/partner/fields"}{/block} { name : 'id', type : 'int' }, { name : 'name', type : 'string' }] }); //{/block} Versucht man jetzt einen neuen Gutschein hinzuzufügen bzw. einen bestehenden zu editieren, wird uns folgende Fehlermeldung angezeigt: Oops! An error has occured! The following notes should help you. Action "Backend\_Voucher\_getListAction" not found failure in Enlight/Controller/Action.php on line 389 Stack trace: #0 Enlight/Controller/Action.php(159): Enlight\_Controller\_Action-\>\_\_call('getListAction', Array) #1 Enlight/Controller/Action.php(159): Shopware\_Proxies\_ShopwareControllersBackendVoucherProxy-\>getListAction() #2 Enlight/Controller/Dispatcher/Default.php(528): Enlight\_Controller\_Action-\>dispatch('getListAction') #3 Enlight/Controller/Front.php(228): Enlight\_Controller\_Dispatcher\_Default-\>dispatch(Object(Enlight\_Controller\_Request\_RequestHttp), Object(Enlight\_Controller\_Response\_ResponseHttp)) #4 Shopware/Kernel.php(141): Enlight\_Controller\_Front-\>dispatch() #5 vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(472): Shopware\Kernel-\>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #6 Shopware/Components/HttpCache/AppCache.php(256): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL) #7 vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php(243): Shopware\Components\HttpCache\AppCache-\>forward(Object(Symfony\Component\HttpFoundation\Request), true) #8 Shopware/Components/HttpCache/AppCache.php(102): Symfony\Component\HttpKernel\HttpCache\HttpCache-\>pass(Object(Symfony\Component\HttpFoundation\Request), true) #9 shopware.php(109): Shopware\Components\HttpCache\AppCache-\>handle(Object(Symfony\Component\HttpFoundation\Request)) #10 {main} Was wir uns denken: Unsere Data-Store-Klasse (wie oben gezeigt) versucht die Funktion „getList“ des Backend-Controllers ‚Shopware_Controllers_Backend_Voucher‘ zurufen. Diese existiert allerdings nicht in dieser Klasse und deshalb tritt dieser Fehler auf. Lösungsansatz: Wir wollen den Standard Backend-Controller ‚Shopware_Controllers_Backend_Voucher‘ erweitern (über Vererbung, da Events bzw. Hooks an dieser Stelle nicht funktionieren) und diesem dann die Funktion „getListAction()“ hinzufügen. Nur wissen wir an dieser Stelle nicht wie wir korrekt von diesem Controller erben können und dies in unserer Bootstrap-Klasse einbinden müssen (wenn überhaupt nötig).

Nein - das wird so nicht möglich sein. Aber du kannst doch den {url} tag von smarty entsprechend mit deinen Plugin Daten füttern. Aus dem Kopf {url module=“backend” controller=“deinPlugin” action=“getList”}. Funktioniert das nicht?! Viele Grüße

1 Like

Perfekt. Vielen Dank für die schnelle Hilfe. Wir konnten über diesen URL-Tag erfolgreich die passende Funktion rufen.