Parlons de votre projet
Partitech Sonata Extra Bundle

Sonata Extra Bundle : sélecteur de langue

Sonata Extra Bundle fournit un sélecteur de langue riche en fonctionnalités, compatible avec les pages hybrides. Ce document décrit les étapes pour activer et utiliser le sélecteur de langue dans votre application Sonata. Configuration du sélecteur de lang...

Contrôles de compatibilité Symfony et Sonata

Sonata Extra Bundle fournit un sélecteur de langue riche en fonctionnalités, compatible avec les pages hybrides. Ce document décrit les étapes pour activer et utiliser le sélecteur de langue dans votre application Sonata.

Configuration du sélecteur de langue

Intégration avec les pages hybrides

Le sélecteur de langue peut s'intégrer parfaitement à vos contrôleurs et routes existants. Une fois que vous avez un contrôleur avec une route définie, vous pouvez le trouver et le gérer dans le gestionnaire de pages Sonata. Le Sonata Extra Bundle permet la personnalisation des URL d'action.

Exemple :

  • Version française d'une page d'article de blog : /blog-mon-article/{slug} languageSwitcher_localized_route_fr.png
  • Version anglaise de la même page : /blog-my-article/{slug} languageSwitcher_localized_route_fr.png

Le sélecteur de langue détecte automatiquement les pages localisées en fonction de la configuration. languageSwitcher_menuDéroulant.png

Injection du service de localisation

Pour activer la fonctionnalité de changement de langue, injectez le LocaleService dans votre application :


 use Partitech\SonataExtra\Service\LocaleService;
 

Utilisez le service pour injecter l'itinéraire localisé calculé dans l'objet de requête :


$linkHeader = $this->localeService->languageSelectorGetHeaderLinks($tagEntity, 'sonata_extra_blog_tag');
$response->headers->set('Link', $linkHeader);

L'objet de requête est ensuite utilisé dans le bloc de changement de langue pour afficher le menu déroulant de sélection de la langue.

Traiter l’entité et associer la route

La fonctionnalité principale réside dans le traitement des entités. Chaque fois que vous manipulez une entité, le processus vérifie les éléments liés localisés. Pour activer cela, informez l'entité des itinéraires associés :

Exemple :

class SonataClassificationCategory extends BaseCategory
{
use EntityTranslationTrait;

    private array $baseRouteName = [
        'sonata_extra_blog_category',
        'sonata_extra_blog_search'
    ];
    // ...
}

Le processus peut gérer différents types de configurations de route. Définissez un argument avec un accesseur correspondant pour faciliter cela.

Exemple : Pour un itinéraire comme /blog-category/{slug}, le processus utilise le $entity->getSlug() fonction pour la passer au générateur d'URL.

Adapter l’exemple à la version installée

Les exemples Symfony et Sonata restent attachés aux versions indiquées dans l’article. Symfony 4.x et Symfony 6.2 ne sont plus maintenus : pour un projet actuel, utilisez une branche maintenue et la documentation correspondant exactement à vos dépendances.

php bin/console about
composer show symfony/framework-bundle sonata-project/admin-bundle

Avant de reprendre le code, contrôlez les signatures, les services, les routes et les templates concernés. Ajoutez ensuite un test fonctionnel couvrant les autorisations, le code HTTP et le résultat visible.

Référence : versions Symfony maintenues.

Partager cet article