Présentation
Le bundle SonataExtra introduit un moyen flexible et puissant de gérer les ressources CSS et JavaScript dans les blocs Sonata. Cette fonctionnalité permet aux développeurs d'inclure facilement et efficacement des fichiers CSS et JS externes, ainsi que des styles et scripts en ligne.
Intégration
Chargement efficace
Les assets (CSS/JS) sont chargés dans la page seulement si le bloc correspondant est utilisé. Cela assure un chargement efficace et évite les surcharges inutiles, ce qui est particulièrement bénéfique pour l'optimisation des performances.
Service de gestion des ressources front-end
Le service AssetsHandler est au cœur de cette fonctionnalité. Il est responsable de la gestion de l'ajout des ressources CSS et JS à vos blocs Sonata. Ce service prend en charge l'ajout de ressources liées et en ligne et permet de spécifier des index personnalisés pour le regroupement des ressources.
Déclarer des ressources dans les blocs
Pour utiliser le service AssetsHandler dans vos blocs, suivez ces étapes :
- Injecter des dépendances :
Injecter le AssetsHandler et Environment services dans votre service de bloc en utilisant le autowireDependencies méthode.
use Partitech\SonataExtra\Service\AssetsHandler;
use Twig\Environment;
use Symfony\Contracts\Service\Attribute\Required;
private $assetsHandler;
#[Required]
public function autowireDependencies(Environment $twig, AssetsHandler $assetsHandler): void {
parent::__construct($twig);
$this->assetsHandler = $assetsHandler;
}
- Ajouter des actifs dans la méthode execute :
Utilisez le addCss, addJs, addJsInline, et addCssInline méthodes pour ajouter des actifs à votre bloc.
public function execute(BlockContextInterface $blockContext, Response $response = null)
{
// Adding external CSS
$this->assetsHandler->addCss('https://unpkg.com/library@latest/dist/style.css', 'default');
// Adding external JS with @bool defer parameter (default false)
$this->assetsHandler->addJs('https://unpkg.com/library@latest/dist/script.js', true, 'default');
// Adding inline JS
$this->assetsHandler->addJsInline('console.log(window)', true, 'default');
// Adding inline CSS
$this->assetsHandler->addCssInline('.class{ }', 'default');
// ... rest of the execute method ...
}
Rendu des ressources dans les modèles
Pour rendre les ressources dans vos templates Twig, utilisez les fonctions Twig suivantes fournies par le bundle SonataExtra :
{{ sonata_extra_get_blocks_css('default')|raw }}
{{ sonata_extra_get_blocks_css_inline('default', true)|raw }}
{{ sonata_extra_get_blocks_js('default')|raw }}
{{ sonata_extra_get_blocks_js_inline('default', true)|raw }}
'default'L'index est utilisé par défaut si la valeur n'est pas définie, mais des index personnalisés peuvent être spécifiés lors du développement de blocs personnalisés.- Le
|rawLe filtre est utilisé pour garantir le rendu correct des balises HTML. - Vous pouvez utiliser le paramètre de compression (booléen par défaut false) pour rendre compressé
sonata_extra_get_blocks_css_inlineetsonata_extra_get_blocks_js_inline
Personnalisation
Les développeurs peuvent créer des index personnalisés pour regrouper les ressources lors du développement de leurs blocs. Cela offre une flexibilité dans la gestion des ressources à travers différentes parties de l'application.
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.