Sin impuesto Con impuesto

Symfony-Controller im Backoffice von PrestaShop 9: ein Praxisleitfaden

Der Umstieg von ModuleAdminController auf einen Symfony-Controller bringt schnellere und sicherere Seiten. Wir erklären die Schritte und die Fallen bei Tabs und Tokens.

Jesús Meilán
Updated: 26/09/2026 91
Symfony-Controller im Backoffice von PrestaShop 9: ein Praxisleitfaden
Share:

Jahrelang wurden die Backoffice-Seiten eines Moduls mit ModuleAdminController und HelperForm gebaut. Das funktioniert weiterhin, aber PrestaShop migriert sein eigenes Backoffice seit 1.7.6 auf Symfony, und in der 9 sind die meisten Core-Seiten bereits umgestellt. Ein modernes Modul sollte denselben Weg gehen.

1. Die Route

# config/routes.yml
mimodulo_configuracion:
  path: /mimodulo/configuracion
  methods: [GET, POST]
  defaults:
    _controller: 'Rekire\MiModulo\Controller\Admin\ConfiguracionController::indexAction'
    _legacy_controller: AdminMiModuloConfiguracion
    _legacy_link: AdminMiModuloConfiguracion

_legacy_controller verknüpft die Route mit einem Menü-Tab und dessen Berechtigungssystem. Ohne ihn funktioniert die Seite, wird im Menü aber nicht hervorgehoben, und Profile lassen sich nicht einschränken.

2. Der Controller

namespace Rekire\MiModulo\Controller\Admin;

use PrestaShopBundle\Controller\Admin\PrestaShopAdminController;
use PrestaShopBundle\Security\Attribute\AdminSecurity;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ConfiguracionController extends PrestaShopAdminController
{
    #[AdminSecurity("is_granted('read', request.get('_legacy_controller'))")]
    public function indexAction(Request $request): Response
    {
        $form = $this->createForm(ConfiguracionType::class);
        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            // speichern…
            $this->addFlash('success', 'Gespeichert');
        }

        return $this->render('@Modules/mimodulo/views/templates/admin/configuracion.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}

In PrestaShop 9 ist die empfohlene Basisklasse PrestaShopAdminController, und die Sicherheit wird mit PHP-8-Attributen deklariert. In der 8 verwendet man FrameworkBundleAdminController und Annotationen: Wenn Ihr Modul beide Versionen unterstützt, prüfen Sie, welche verfügbar ist.

3. Der Menü-Tab

Deklarieren Sie ihn in der Eigenschaft $tabs des Moduls oder legen Sie ihn bei der Installation an. Und prüfen Sie immer, ob er schon existiert, bevor Sie ihn anlegen: Ein doppelter Tab mit derselben Klasse führt dazu, dass Doctrine zwei Ergebnisse liefert, wo es eines erwartet, und die Seite antwortet mit einem 500-Fehler, der nichts Brauchbares sagt.

if (!Tab::getIdFromClassName('AdminMiModuloConfiguracion')) {
    $tab = new Tab();
    // …
    $tab->add();
}

4. Tokens und Links

In PrestaShop 9 trägt jeder Backoffice-Link ein Symfony-CSRF-Token (_token). Bauen Sie URLs nicht von Hand: Verwenden Sie $this->generateUrl('mimodulo_configuracion') in PHP oder path() in Twig. Eine aus einer anderen Sitzung kopierte URL ergibt „Ungültiges Token“.

5. Übersetzungen

In Twig: {{ 'Guardar'|trans({}, 'Modules.Mimodulo.Admin') }}. In PHP: $this->trans('Guardar', [], 'Modules.Mimodulo.Admin'). Die Domain folgt dem Muster Modules.Nombredelmodulo.Zona.

Was Sie gewinnen

  • Formulare mit echter Validierung statt Prüfungen von Hand.
  • Integrierte Berechtigungen pro Profil.
  • Seiten, die genauso aussehen wie die des Cores und auch in der nächsten Version noch genauso aussehen werden.
Laden...
Cookie-Zustimmung
Zum Seitenanfang