Twig は、Symfony で Web アプリケーションを開発するときに HTML をレンダリングするための頼りになるテンプレート エンジンです。
ただし、Twig の柔軟性は HTML ページの生成だけにとどまりません。これは、マークダウン ファイルの生成、JSON 出力、さらにはプレーン テキストなど、すべて同じコンテンツ セットからコンテンツを複数のチャネルに配信するための強力なツールとなります。
この適応性により、さまざまなチャンネルのコンテンツを作成できます。
Twig を使用して HTML、Markdown、JSON、テキストなどを生成できます
この例では、Symfony の HTTP クライアントを使用して外部 API (https://dummyjson.com/recipes/1) からレシピを取得し、Twig を使用してそれを Markdown ドキュメントとしてレンダリングします。
このアプローチは、外部データ取得用の Symfony HTTP クライアントやビューのレンダリング用の Twig などの Symfony の強力なパッケージを組み合わせて、コマンドライン ツールの Markdown レポートなどのコンテンツを複数のチャネルに配信する方法を示します。
これから構築するコマンド/スクリプトは、API からレシピ データ (タイトル、説明、材料、説明書) を取得して処理し、Twig を使用してコンテンツを構造化された Markdown 形式で出力します。この実践的な使用例では、Web テンプレートを超えて 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 サンプルの各ステップの詳細な説明を次に示します。
PHP コマンドライン ツールなど、通常の Web コンテキストの外で Twig を使用するには、まず 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);
説明:
プロジェクト ディレクトリ (composer.json ファイルと src ディレクトリがある場所) に、my-app ファイルを作成できます。
#!/usr/bin/env php setDefaultCommand("recipe"); $app->add(new FetchRecipeCommand()); $app->run();名前空間とクラスを正しく使用するには、必ずcomposer.jsonファイルのautoloadセクションを設定してください:
#!/usr/bin/env php setDefaultCommand("recipe"); $app->add(new FetchRecipeCommand()); $app->run();自動ロード セクションを変更する場合は、自動ロード ファイルをダンプすることをお勧めします:
#!/usr/bin/env php setDefaultCommand("recipe"); $app->add(new FetchRecipeCommand()); $app->run();次に、API によって取得されたデータをレンダリングするための Twig テンプレート/ビューを作成する必要があります。
レシピの Twig テンプレート/ビューを作成する
このテンプレートはビュー ディレクトリ (例: src/resources/view/recipe.md.twig) に置く必要があります。
#!/usr/bin/env php setDefaultCommand("recipe"); $app->add(new FetchRecipeCommand()); $app->run();この Twig ビュー ファイルは、レシピの名前、材料、手順のセクションを含むマークダウン形式でレシピをレンダリングします。
コマンドの実行
#!/usr/bin/env php setDefaultCommand("recipe"); $app->add(new FetchRecipeCommand()); $app->run();複数のコマンドがある場合は、次のように起動できます:
#!/usr/bin/env php setDefaultCommand("recipe"); $app->add(new FetchRecipeCommand()); $app->run();利用可能なコマンドをすべて表示するには:
#!/usr/bin/env php setDefaultCommand("recipe"); $app->add(new FetchRecipeCommand()); $app->run();結論
レシピをお楽しみください!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3