Twig — это шаблонизатор для рендеринга HTML при разработке веб-приложений с помощью Symfony.
Однако гибкость Twig выходит за рамки создания только HTML-страниц. Это может быть мощный инструмент для доставки контента по нескольким каналам, например, для генерации файлов Markdown, вывода JSON и даже простого текста — и все это из одного и того же набора контента.
Эта адаптивность позволяет создавать контент для разных каналов.
Вы можете использовать Twig для генерации HTML, Markdown, JSON, текста и т. д.
В этом примере мы используем HTTP-клиент Symfony для получения рецепта из внешнего API (https://dummyjson.com/recipes/1) и рендеринга его как документа Markdown с помощью Twig.
Этот подход показывает, как можно объединить мощные пакеты Symfony, такие как HTTP-клиент Symfony для получения внешних данных и Twig для рендеринга представлений, для доставки контента по нескольким каналам, например, отчетов Markdown в инструменте командной строки.
Команда/скрипт, который мы собираемся создать, извлекает данные рецепта (название, описание, ингредиенты и инструкции) из API, обрабатывает их, а затем использует Twig для вывода содержимого в структурированном формате Markdown. Этот практический пример использования показывает, как использовать Twig помимо веб-шаблонов, что делает его универсальным для создания контента в различных форматах.
Итак, мы собираемся использовать:
Убедитесь, что у вас установлены необходимые компоненты для HTTP-запросов и создания команд:
composer require symfony/http-client symfony/console twig/twig
Сначала давайте создадим новую команду Symfony.
Если вы хотите узнать больше о том, как создать инструмент командной строки с использованием компонента Symfony Command, я написал об этом специальную статью: https://dev.to/robertobutti/building-a-command-line-tool -with-php-and-symfony-console-4n6g
Классы команд обычно находятся в каталоге src/Commands.
# create a new empty directory mkdir -p src/Commands # create a new empty file touch src/Commands/FetchRecipeCommand.php
Класс команды (например, 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; } }
Вот подробное объяснение каждого шага в примере FetchRecipeCommand.
Чтобы использовать Twig вне его обычного веб-контекста, например, в инструменте командной строки PHP, вам сначала необходимо инициализировать его вручную через класс Twig\Environment. Вот пример настройки Twig с помощью консольной команды:
$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;
Объяснение:
$client = HttpClient::create(); $response = $client->request('GET', 'https://dummyjson.com/recipes/1');
Объяснение:
$recipeData = $response->toArray();
Объяснение:
$markdownOutput = $this->twig->render('recipe.md.twig', $recipeData);
Объяснение:
$output->writeln($markdownOutput);
Объяснение:
Вам необходимо создать стартовый файл, чтобы позволить пользователю запускать вашу команду Symfony непосредственно из оболочки. (В этой статье мы не создаем приложение Symfony; мы создаем PHP-скрипт с использованием пакетов Symfony.)
В каталоге проекта, где находится файл композитора.json и каталог src, вы можете создать файл моего приложения.
#!/usr/bin/env php setDefaultCommand("recipe"); $app->add(new FetchRecipeCommand()); $app->run();
Чтобы правильно использовать пространства имен и классы, обязательно установите раздел автозагрузки в файле композитора.json:
{ "require": { "symfony/http-client": "^7.1", "symfony/console": "^7.1", "twig/twig": "^3.14" }, "autoload": { "psr-4": { "MyExample\\": "src/" } } }
Если вы измените раздел автозагрузки, предлагаю сбросить файл автозагрузки:
composer dump-autoload
Теперь вам нужно создать шаблон/представление Twig для рендеринга данных, полученных через API.
Затем создайте шаблон/представление Twig для отображения рецепта в формате Markdown.
Этот шаблон должен находиться в каталоге представлений (например, 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!
Этот файл представления Twig отображает рецепт в формате Markdown с разделами для названия рецепта, ингредиентов и инструкций.
Чтобы выполнить команду, выполните в терминале следующее:
php my-app
Если у вас более одной команды, вы можете запустить:
php m-app recipe
Чтобы просмотреть все доступные команды:
php my-app list
Благодаря такому подходу вы можете легко получать данные из внешнего API с помощью HTTP-клиента Symfony, обрабатывать ответ и отображать выходные данные в структурированном формате с помощью Twig. В этом случае команда выводит рецепт в формате Markdown, но этот метод можно адаптировать к любому другому контенту или типу данных, которые вам необходимо обработать.
Наслаждайтесь рецептом!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3