Sin impuesto Con impuesto

Controller Symfony nel back office di PrestaShop 9: guida pratica

Passare da ModuleAdminController a un controller Symfony dà schermate più veloci e sicure. Ti spieghiamo i passaggi e le trappole delle schede e dei token.

Jesús Meilán
Updated: 26/09/2026 89
Controller Symfony nel back office di PrestaShop 9: guida pratica
Share:

Per anni, le schermate di back office di un modulo si facevano con ModuleAdminController e HelperForm. Funzionano ancora, ma PrestaShop dalla 1.7.6 sta migrando il proprio back office a Symfony, e nella 9 la maggior parte delle schermate del core lo sono già. Un modulo moderno dovrebbe seguire la stessa strada.

1. La rotta

# 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 collega la rotta a una scheda del menu e al suo sistema di permessi. Senza, la schermata funziona ma non compare evidenziata nel menu e i profili non si possono limitare.

2. Il 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()) {
            // salvare…
            $this->addFlash('success', 'Salvato');
        }

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

In PrestaShop 9 la classe base consigliata è PrestaShopAdminController e la sicurezza si dichiara con gli attributi di PHP 8. Nella 8 si usa FrameworkBundleAdminController con le annotazioni: se il tuo modulo supporta entrambe le versioni, controlla quale è disponibile.

3. La scheda del menu

Dichiarala nella proprietà $tabs del modulo o creala durante l'installazione. E controlla sempre se esiste già prima di crearla: una scheda duplicata con la stessa classe fa sì che Doctrine restituisca due risultati dove se ne aspetta uno, e la schermata risponde con un errore 500 che non dice niente di utile.

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

4. Token e link

In PrestaShop 9 ogni link del back office porta un token CSRF di Symfony (_token). Non costruire gli URL a mano: usa $this->generateUrl('mimodulo_configuracion') in PHP o path() in Twig. Un URL copiato da un'altra sessione dà «Token non valido».

5. Traduzioni

In Twig: {{ 'Guardar'|trans({}, 'Modules.Mimodulo.Admin') }}. In PHP: $this->trans('Guardar', [], 'Modules.Mimodulo.Admin'). Il dominio segue lo schema Modules.Nombredelmodulo.Zona.

Cosa ci guadagni

  • Form con una validazione vera, non controlli fatti a mano.
  • Permessi per profilo integrati.
  • Schermate che hanno lo stesso aspetto di quelle del core, e che continueranno ad averlo nella prossima versione.
Caricamento...
Consenso sui cookie
Torna all'inizio