ldc-groupe/docs/inputs/STATIC_ROUTES.md
2026-03-09 16:01:29 +01:00

4.5 KiB
Raw Permalink Blame History

Introduction

Cette documentation est destinée à décrire l'utilisation ainsi que l'ajout de routes statiques dans l'input StaticRouteSelect.

Table des matières

Contexte

Un projet bien pensé est un projet dans lequel toutes les pages disponibles sont issues de dynamic pages. Cette approche permet de centraliser la gestion des contenus, d’assurer une meilleure maintenabilité et de limiter les incohérences entre les différentes sections du site.

Malheureusement, ce n’est pas une règle universelle. Certains projets comportent encore des routes définies en dur pour des besoins spécifiques ou historiques. C’est pourquoi nous avons développé un champ spécifique dédié aux routes statiques. Celui-ci nous permet d’ajouter des liens vers des routes explicitement définies dans le projet, tout en conservant un cadre structuré et contrôlé.

Ajout

Lorsqu’une nouvelle route statique doit être ajoutée au projet, plusieurs étapes sont nécessaires afin qu’elle puisse apparaître dans la liste des routes statiques sélectionnables depuis l’interface.

Dans un premier temps, il faut déclarer la route dans le fichier web-front.php, comme n’importe quelle route classique du projet.

Ensuite, il est nécessaire de mettre à jour l'enum StaticRoutesEnum en y ajoutant une nouvelle entrée correspondant à cette route statique.

À noter que cet enum peut implémenter une logique propre à chaque projet. En revanche, certaines contraintes doivent impérativement être respectées :

  • respecter la structure d’un enum uwil (label, name, value),
  • ajouter une entrée supplémentaire nommé route dédiée à l’URL,
  • implémenter une méthode getRoutes() permettant de retourner la liste complète des routes statiques disponibles,
  • implémenter une méthode getRoute() permettant de récupérer une route spécifique à partir de la valeur de l’enum fournie en paramètre.

En base de données, seule la valeur de l’enum sélectionné est enregistrée. Cette valeur permet ensuite de résoudre dynamiquement l’URL correspondante via l’enum.

Exemple

Pour illustrer avec un exemple concret, dans le projet LDC, plusieurs routes statiques étaient présentes pour la partie contact (via un enum dédié), ainsi qu’une route spécifique pour la recherche.

Nous avons donc récupéré la liste des pages à partir de l’enum spécifique ContactFormType, puis construit dynamiquement les valeurs de l'enum StaticRoutesEnum. De cette manière, nous avons pu fusionner les routes statiques liées au contact avec la route de recherche au sein d’un même ensemble cohérent tout en correspondant avec les valeurs de notre enum StaticRoutesEnum.

    case collaborator = 1;
    case breeder      = 2;
    case professional = 3;
    case restauration = 4;
    case export       = 5;
    case finance      = 6;
    case commitments  = 7;
    case product      = 8;
    case info         = 9;
    case press        = 10;
    case search       = 11;

    /**
     * Get array of each route with his matching value.
     *
     * @param callable|null $callback
     * @return array
     */
    public static function getRoutes(?callable $callback = null): array
    {
        $dataKeyValue = array_merge(ContactFormType::getLabelisedRoutes(), [
            self::search->name => (object) [
                'label' => trans('front.search.title'),
                'route' => '/recherche?texte=LDC',
            ]
        ]);
        return collect($dataKeyValue)
            ->reject(fn($item) => is_null($item->label) || is_null($item->route))
            ->map(function ($item, $key) {
                $targetEnum = collect(self::cases())->first(fn($enum) => $enum->name === $key);

                return (object) [
                    'label' => ucfirst($item->label),
                    'value' => $targetEnum->value,
                    'route' => $item->route,
                ];
            })
            ->when(!is_null($callback), fn ($collection) => $collection->filter($callback))
            ->values()
            ->toArray();
    }

    /**
     * Get the url of a given enum value.
     *
     * @param integer $value
     * @return string|null
     */
    public static function getRoute(int $value): ?string
    {
        $collect = collect(self::getRoutes(fn ($route) => $route->value == $value));
        return $collect->isEmpty() ? null : $collect->first()->route;
    }