Twig est un moteur de création de modèles incontournable pour le rendu HTML lors du développement d'applications Web avec Symfony.
Cependant, la flexibilité de Twig va au-delà de la simple génération de pages HTML. Il peut s'agir d'un outil puissant pour diffuser du contenu sur plusieurs canaux, tels que la génération de fichiers Markdown, des sorties JSON et même du texte brut, le tout à partir du même ensemble de contenu.
Cette adaptabilité vous permet de créer du contenu pour différents canaux.
Vous pouvez utiliser Twig pour générer du HTML, du Markdown, du JSON, du texte, etc.
Dans cet exemple, nous utilisons le client HTTP de Symfony pour récupérer une recette à partir d'une API externe (https://dummyjson.com/recipes/1) et la restituer sous forme de document Markdown à l'aide de Twig.
Cette approche montre comment vous pouvez combiner les puissants packages de Symfony, comme le client HTTP Symfony pour la récupération de données externes et Twig pour le rendu des vues, pour diffuser du contenu sur plusieurs canaux, tels que les rapports Markdown dans un outil de ligne de commande.
La commande/script que nous allons créer récupère les données de la recette (titre, description, ingrédients et instructions) de l'API, les traite, puis utilise Twig pour afficher le contenu dans un format Markdown structuré. Ce cas d'utilisation pratique illustre comment utiliser Twig au-delà des modèles Web, le rendant polyvalent pour générer du contenu dans différents formats.
Nous allons donc utiliser :
Assurez-vous que les composants requis sont installés pour les requêtes HTTP et la création de commandes :
composer require symfony/http-client symfony/console twig/twig
Tout d'abord, créons une nouvelle commande Symfony.
Si vous souhaitez en savoir plus sur la façon de créer un outil de ligne de commande à l'aide du composant Symfony Command, j'ai écrit un article spécifique à ce sujet : https://dev.to/robertobutti/building-a-command-line-tool -avec-php-et-symfony-console-4n6g
Les classes de commandes vont généralement dans le répertoire src/Commands.
# create a new empty directory mkdir -p src/Commands # create a new empty file touch src/Commands/FetchRecipeCommand.php
Classe de commande (par exemple, src/Commands/FetchRecipeCommand.php) :
setName('recipe') ->setDescription('Prints a recipe in Markdown') ->setHelp('This command prints a simple recipe in Markdown.'); // Step 1: loading the Twig environment $loader = new \Twig\Loader\FilesystemLoader(__DIR__ . '/../resources/views'); $twig = new \Twig\Environment( $loader, // Optional: Enable caching for better performance /*[ 'cache' => __DIR__ . '/../../cache', ]*/ ); $this->twig = $twig; parent::__construct(); } protected function configure() { $this->setDescription('Fetches a recipe from an API and renders it as Markdown'); } protected function execute(InputInterface $input, OutputInterface $output): int { // Step 2: Initialize the HTTP client and fetch the recipe $client = HttpClient::create(); $response = $client->request('GET', 'https://dummyjson.com/recipes/1'); // Step 3: obtain the array of info $recipeData = $response->toArray(); // Step 4: Render the template using Twig, returning a string $markdownOutput = $this->twig->render('recipe.md.twig', $recipeData); // Step 5: Output the generated Markdown $output->writeln($markdownOutput); return Command::SUCCESS; } }
Voici une explication détaillée de chaque étape dans l'exemple FetchRecipeCommand.
Pour utiliser Twig en dehors de son contexte Web typique, comme dans un outil de ligne de commande PHP, vous devez d'abord l'initialiser manuellement via la classe Twig\Environment. Voici un exemple de configuration pour Twig dans une commande de console :
$loader = new \Twig\Loader\FilesystemLoader(__DIR__ . '/../resources/views'); $twig = new \Twig\Environment( $loader, // Optional: Enable caching for better performance /*[ 'cache' => __DIR__ . '/../../cache', ]*/ ); $this->twig = $twig;
Explication:
$client = HttpClient::create(); $response = $client->request('GET', 'https://dummyjson.com/recipes/1');
Explication:
$recipeData = $response->toArray();
Explication:
$markdownOutput = $this->twig->render('recipe.md.twig', $recipeData);
Explication:
$output->writeln($markdownOutput);
Explication:
Vous devez créer un fichier de démarrage pour permettre à l'utilisateur de lancer votre commande Symfony directement depuis le shell. (Dans cet article, nous ne créons pas d'application Symfony ; nous construisons un script PHP en utilisant les packages Symfony.)
Dans le répertoire du projet, où se trouve le fichier composer.json et où se trouve le répertoire src, vous pouvez créer un fichier my-app.
#!/usr/bin/env php setDefaultCommand("recipe"); $app->add(new FetchRecipeCommand()); $app->run();
Pour utiliser correctement les espaces de noms et les classes, assurez-vous de définir la section de chargement automatique dans le fichier composer.json :
{ "require": { "symfony/http-client": "^7.1", "symfony/console": "^7.1", "twig/twig": "^3.14" }, "autoload": { "psr-4": { "MyExample\\": "src/" } } }
Si vous modifiez la section de chargement automatique, je suggère de vider le fichier de chargement automatique :
composer dump-autoload
Maintenant, vous devez créer le modèle/vue Twig pour restituer les données récupérées par l'API.
Ensuite, créez un modèle/une vue Twig pour afficher la recette au format Markdown.
Ce modèle doit être placé dans le répertoire des vues (par exemple, src/resources/view/recipe.md.twig).
# Recipe: {{ name }} - Preparation time: {{ prepTimeMinutes }} minutes - Cooking time {{ cookTimeMinutes }} minutes - Difficulty level: {{ difficulty }} - Cuisine: {{ cuisine }} - Servings {{ servings }} people, with {{ caloriesPerServing }} calories per person ## Ingredients: {% for ingredient in ingredients %} - {{ ingredient }} {% endfor %} ## Instructions: {% for instruction in instructions %} - {{ instruction }} {% endfor %} Enjoy!
Ce fichier d'affichage Twig affichera la recette au format Markdown, avec des sections pour le nom de la recette, les ingrédients et les instructions.
Pour exécuter la commande, exécutez ce qui suit dans le terminal :
php my-app
Dans le cas où vous disposez de plusieurs commandes, vous pouvez lancer :
php m-app recipe
Pour voir toutes les commandes disponibles :
php my-app list
Avec cette approche, vous pouvez facilement récupérer des données à partir d'une API externe à l'aide du client HTTP de Symfony, traiter la réponse et restituer la sortie dans un format structuré à l'aide de Twig. Dans ce cas, la commande génère une recette au format Markdown, mais cette technique peut être adaptée à tout autre contenu ou type de données que vous devez traiter.
Bonne recette !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3