BCard - Documentation technique

AdminCardController extends AbstractController
in package

Administre le catalogue des produits « carte » (entité `Card`) proposés à la commande.

Ce contrôleur permet au staff de créer, modifier, prévisualiser, masquer/afficher et supprimer les modèles de produits vendus, y compris l'upload des visuels et la normalisation des options d'impression associées (une seule option peut être marquée par défaut). Attention : la visibilité est portée par le drapeau hide de l'entité et les noms de routes sont trompeurs — app_card_show masque la carte tandis que app_card_hide la réaffiche.

Préfixe de route : /admin. Aucun #[IsGranted] au niveau de la classe : chaque action contrôle elle-même la détention de ROLE_ADMIN ou ROLE_OPERATOR.

Attributes
#[Route]
'/admin'

Table of Contents

Methods

createCard()  : Response
Crée un nouveau produit « carte » dans le catalogue.
delete()  : Response
Supprime définitivement un produit « carte ».
edit()  : Response
Modifie un produit « carte » existant.
hideCard()  : RedirectResponse
Réaffiche un produit « carte » dans le catalogue public.
index()  : Response
Affiche la liste paginée des produits « carte » du catalogue.
showApercu()  : Response
Prévisualise la fiche produit publique d'une carte depuis le back-office.
showCard()  : RedirectResponse
Masque un produit « carte » du catalogue public.
uploadImage()  : void
Déplace les visuels soumis dans le formulaire et les rattache à la carte.
normalizeOptions()  : void
Normalise les options d'impression d'une carte pour garantir une unique option par défaut.

Methods

createCard()

Crée un nouveau produit « carte » dans le catalogue.

public createCard(Request $request, EntityManagerInterface $entityManager) : Response

Refuse l'accès hors ROLE_ADMIN/ROLE_OPERATOR. Instancie une Card vierge, traite le formulaire CardType et, à la soumission valide, déplace les visuels via AdminCardController::uploadImage(), normalise les options d'impression via AdminCardController::normalizeOptions(), puis persiste l'entité.

Route : /admin/business/card/new (toutes méthodes), nom app_card_new. Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).

Parameters
$request : Request
$entityManager : EntityManagerInterface
Attributes
#[Route]
'/business/card/new'
$name: 'app_card_new'
Return values
Response

Formulaire HTML admin/card/create.html.twig, ou redirection vers app_card après création.

delete()

Supprime définitivement un produit « carte ».

public delete(Request $request, Card $card, EntityManagerInterface $entityManager) : Response

Refuse l'accès hors ROLE_ADMIN/ROLE_OPERATOR. La suppression n'est effectuée que si le jeton CSRF delete<id> transmis dans _token est valide ; en cas de jeton invalide, rien n'est supprimé mais le flash de succès « Carte supprimée avec succès. » est tout de même affiché et la redirection est identique — le résultat n'est donc pas discriminant côté interface.

Route : /admin/card/{id} (DELETE), nom admin_card_delete. Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).

Parameters
$request : Request
$card : Card
$entityManager : EntityManagerInterface
Attributes
#[Route]
'/card/{id}'
$name: 'admin_card_delete'
$methods: ['DELETE']
Return values
Response

Redirection vers app_card.

edit()

Modifie un produit « carte » existant.

public edit(Card $card, Request $request, EntityManagerInterface $entityManager) : Response

Refuse l'accès hors ROLE_ADMIN/ROLE_OPERATOR. Traite le formulaire CardType lié à la carte ; à la soumission valide, réapplique AdminCardController::uploadImage() puis AdminCardController::normalizeOptions() avant le flush(). Note : l'upload ne remplace le tableau images que si de nouveaux fichiers ont été envoyés.

Route : /admin/card/{id}/edit (toutes méthodes), nom admin_card_edit. Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).

Parameters
$card : Card
$request : Request
$entityManager : EntityManagerInterface
Attributes
#[Route]
'/card/{id}/edit'
$name: 'admin_card_edit'
Return values
Response

Formulaire HTML admin/card/edit.html.twig, ou redirection vers app_card après enregistrement.

hideCard()

Réaffiche un produit « carte » dans le catalogue public.

public hideCard(Card $card, EntityManagerInterface $entityManager) : RedirectResponse

Malgré son nom, cette action repasse hide = false sur la carte et confirme par un flash « Carte affichée avec succès. ». Contrairement aux autres actions du contrôleur, elle n'effectue aucun contrôle de rôle explicite : seule la sécurisation globale du préfixe /admin (pare-feu / access_control) la protège.

Route : /admin/card/{id}/hide (toutes méthodes), nom app_card_hide.

Parameters
$card : Card
$entityManager : EntityManagerInterface
Attributes
#[Route]
'/card/{id}/hide'
$name: 'app_card_hide'
Return values
RedirectResponse

Redirection vers app_card.

index()

Affiche la liste paginée des produits « carte » du catalogue.

public index(CardRepository $cardRepository, Request $request, PaginatorInterface $paginator) : Response

Refuse l'accès si l'utilisateur ne détient ni ROLE_ADMIN ni ROLE_OPERATOR. Les cartes sont triées par identifiant décroissant et paginées par blocs de 4 (paramètre de query page). Aucun filtre de visibilité n'est appliqué : les cartes masquées apparaissent aussi.

Route : /admin/card (toutes méthodes), nom app_card. Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).

Parameters
$cardRepository : CardRepository
$request : Request
$paginator : PaginatorInterface
Attributes
#[Route]
'/card'
$name: 'app_card'
Return values
Response

showApercu()

Prévisualise la fiche produit publique d'une carte depuis le back-office.

public showApercu(Card $card, CardRepository $cardRepository, Request $request) : Response

Refuse l'accès hors ROLE_ADMIN/ROLE_OPERATOR. Effet de bord notable : le panier stocké en session (cart) est vidé avant le rendu. La méthode récupère jusqu'à 4 produits similaires (même typeProduct), calcule la taille maximale de fichier de design autorisée en Mo à partir du paramètre design_file_max_bytes, puis rend le template public de fiche produit avec le drapeau is_admin_preview à true.

Route : /admin/show/{id}/apercu (toutes méthodes), nom admin_card_apercu. Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).

Parameters
$card : Card
$cardRepository : CardRepository
$request : Request
Attributes
#[Route]
'/show/{id}/apercu'
$name: 'admin_card_apercu'
Return values
Response

Page HTML home/product-retail.html.twig en mode aperçu administrateur.

showCard()

Masque un produit « carte » du catalogue public.

public showCard(Card $card, EntityManagerInterface $entityManager) : RedirectResponse

Malgré son nom, cette action ne rend rien : elle positionne hide = true sur la carte (la retirant donc de la boutique) et confirme par un flash « Carte masquée avec succès ». L'opération inverse est AdminCardController::hideCard().

Route : /admin/card/{id}/show (toutes méthodes), nom app_card_show. Réservée à ROLE_ADMIN ou ROLE_OPERATOR (contrôle en dur dans la méthode).

Parameters
$card : Card
$entityManager : EntityManagerInterface
Attributes
#[Route]
'/card/{id}/show'
$name: 'app_card_show'
Return values
RedirectResponse

Redirection vers app_card.

uploadImage()

Déplace les visuels soumis dans le formulaire et les rattache à la carte.

public uploadImage(FormInterface $form, Card $card) : void

Lit le champ images du formulaire ; si aucun fichier n'a été envoyé, la méthode ne fait rien et les visuels existants sont conservés. Sinon chaque fichier est renommé avec un uniqid() et son extension devinée, puis déplacé dans le répertoire du paramètre image_directory. Une FileException sur un fichier est capturée : un flash d'erreur est posé, l'erreur est écrite dans le log PHP et le fichier concerné est simplement ignoré. Le tableau des noms de fichiers réussis remplace intégralement Card::setImages().

Parameters
$form : FormInterface
$card : Card

normalizeOptions()

Normalise les options d'impression d'une carte pour garantir une unique option par défaut.

private normalizeOptions(Card $card) : void

Parcourt Card::getPrintOptions() en mémorisant la première option active rencontrée. Toute option marquée par défaut au-delà de la première est repassée à false (dédoublonnage). Si finalement aucune option n'est marquée par défaut et qu'au moins une option active existe, cette première option active est promue par défaut. Les modifications ne sont pas persistées ici : elles le sont par le flush() de l'appelant.

Parameters
$card : Card

Carte dont les options d'impression doivent être normalisées.


        
On this page

Search results