「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Twig を使用して PHP で Markdown をレンダリングする

Twig を使用して PHP で Markdown をレンダリングする

2024 年 11 月 8 日に公開
ブラウズ:417

Using Twig for rendering Markdown with PHP

Twig は、Symfony で Web アプリケーションを開発するときに HTML をレンダリングするための頼りになるテンプレート エンジンです。
ただし、Twig の柔軟性は HTML ページの生成だけにとどまりません。これは、マークダウン ファイルの生成、JSON 出力、さらにはプレーン テキストなど、すべて同じコンテンツ セットからコンテンツを複数のチャネルに配信するための強力なツールとなります。

この適応性により、さまざまなチャンネルのコンテンツを作成できます。

Twig を使用して HTML、Markdown、JSON、テキストなどを生成できます

ユースケース: Symfony を使用してレシピを Markdown としてフェッチしてレンダリングする

この例では、Symfony の HTTP クライアントを使用して外部 API (https://dummyjson.com/recipes/1) からレシピを取得し、Twig を使用してそれを Markdown ドキュメントとしてレンダリングします。
このアプローチは、外部データ取得用の Symfony HTTP クライアントやビューのレンダリング用の Twig などの Symfony の強力なパッケージを組み合わせて、コマンドライン ツールの Markdown レポートなどのコンテンツを複数のチャネルに配信する方法を示します。

これから構築するコマンド/スクリプトは、API からレシピ データ (タイトル、説明、材料、説明書) を取得して処理し、Twig を使用してコンテンツを構造化された Markdown 形式で出力します。この実践的な使用例では、Web テンプレートを超えて Twig を使用して、さまざまな形式のコンテンツを生成する多用途性を実現する方法を示しています。

したがって、次を使用します:

  • Symfony Console コマンドラインツールを構築するためのコンポーネント https://symfony.com/doc/current/components/console.html
  • Symfony HTTP クライアント https://symfony.com/doc/current/http_client.html HTTP API の取得と使用用
  • Symfony Twig https://twig.symfony.com/doc/3.x/intro.html#データレンダリング用のインストール
  • レシピ API: 「ダミー」レシピ https://dummyjson.com/recipes/1 を 1 つ選択して、構造化 JSON を取得してマークダウン ファイルに変換するプロセスを示してデモンストレーションします。 .

必要な Symfony コンポーネントのインストール

HTTP リクエストとコマンドの作成に必要なコンポーネントがインストールされていることを確認してください:

composer require symfony/http-client symfony/console twig/twig

Symfony コマンドを作成する

まず、新しい 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 サンプルの各ステップの詳細な説明を次に示します。

段階的な内訳

ステップ 1: Twig 環境をロードする

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;

説明:

  • Twig 環境は、Twig にテンプレートの場所を指示する FilesystemLoader を作成することによって初期化されます。このケースでは、Twig テンプレートが保存されている src/resources/views フォルダーを指します。
  • 次に、$twig 環境がインスタンス化され、テンプレートのレンダリングを担当します。オプションのキャッシュを有効にして、プリコンパイルされたテンプレートを保存することでパフォーマンスを向上させることができます。
  • 最後に、初期化された $twig 環境は、後で使用するために (execute() メソッドで) $this->twig に割り当てられます。

ステップ 2: HTTP クライアントを初期化し、レシピを取得する

$client = HttpClient::create();
$response = $client->request('GET', 'https://dummyjson.com/recipes/1');

説明:

  • Symfony HTTP クライアントは HttpClient::create() メソッドを使用して作成され、コマンドが HTTP リクエストを実行できるようになります。
  • レシピを取得するには、request() メソッドが指定された URL (https://dummyjson.com/recipes/1) に対して GET リクエストを実行します。
  • API は、$response 変数に保存された JSON 応答を返します。

ステップ 3: 一連の情報を取得する

$recipeData = $response->toArray();

説明:

  • toArray() メソッドは、API からの JSON 応答を PHP 配列に変換します。この配列にはレシピのデータ (名前、材料、手順など) が含まれており、次のステップで Twig テンプレートを設定するために使用されます。

ステップ 4: Twig を使用してテンプレートをレンダリングする

$markdownOutput = $this->twig->render('recipe.md.twig', $recipeData);

説明:

  • Twig 環境の render() メソッドは Markdown 出力を生成します。 src/resources/views フォルダーからテンプレート (recipe.md.twig) を読み込みます。
  • API からフェッチされたレシピ データ ($recipeData) がテンプレートに渡され、レシピ名、材料、手順などのプレースホルダーが置き換えられ、完全にフォーマットされた Markdown ファイルが作成されます。
  • レンダリングされた Markdown コンテンツ (render() メソッドによって返される文字列) は、$markdownOutput 変数に保存されます。

ステップ 5: 生成されたマークダウンの出力を生成する

$output->writeln($markdownOutput);

説明:

  • 最終的な Markdown コンテンツは、$output->writeln() メソッドを使用してコンソールに出力されます。このメソッドは文字列をコンソールに出力し、ユーザーがマークダウン形式でフォーマットされたレシピを確認できるようにします (最終的には出力をシェル内のファイルにリダイレクトできます)。
スターターファイルの作成

ユーザーがシェルから Symfony コマンドを直接起動できるようにするには、スターター ファイルを作成する必要があります。 (この記事では、Symfony アプリケーションを作成するのではなく、Symfony パッケージを使用して PHP スクリプトを構築します。)

プロジェクト ディレクトリ (composer.json ファイルと src ディレクトリがある場所) に、my-app ファイルを作成できます。

#!/usr/bin/env php setDefaultCommand("レシピ"); $app->add(new FetchRecipeCommand()); $app->run();
#!/usr/bin/env php
setDefaultCommand("recipe");

$app->add(new FetchRecipeCommand());


$app->run();

名前空間とクラスを正しく使用するには、必ずcomposer.jsonファイルのautoloadセクションを設定してください:


{ "必要とする": { "symfony/http-client": "^7.1", "symfony/コンソール": "^7.1", "小枝/小枝": "^3.14" }、 "オートロード": { "psr-4": { "MyExample\\": "src/" } } }
#!/usr/bin/env php
setDefaultCommand("recipe");

$app->add(new FetchRecipeCommand());


$app->run();

自動ロード セクションを変更する場合は、自動ロード ファイルをダンプすることをお勧めします:


composer dump-autoload
#!/usr/bin/env php
setDefaultCommand("recipe");

$app->add(new FetchRecipeCommand());


$app->run();

次に、API によって取得されたデータをレンダリングするための Twig テンプレート/ビューを作成する必要があります。

レシピの Twig テンプレート/ビューを作成する

次に、レシピを Markdown 形式でレンダリングするための Twig テンプレート/ビューを作成します。

このテンプレートはビュー ディレクトリ (例: src/resources/view/recipe.md.twig) に置く必要があります。

# レシピ: {{ 名前 }} - 準備時間: {{ prepTimeMinutes }} 分 - 調理時間 {{ CookTimeMinutes }} 分 - 難易度: {{ 難易度 }} - 料理: {{ 料理 }} - {{ サービング }} 人分、1 人あたり {{ カロリーパーサービング }} カロリー ## 材料: {成分中の成分の%} - {{ 材料 }} {% 終了の %} ## 説明書: {% 説明内の指示 %} - {{ 命令 }} {% 終了の %} 楽しむ!
#!/usr/bin/env php
setDefaultCommand("recipe");

$app->add(new FetchRecipeCommand());


$app->run();

この Twig ビュー ファイルは、レシピの名前、材料、手順のセクションを含むマークダウン形式でレシピをレンダリングします。

コマンドの実行

コマンドを実行するには、ターミナルで次のコマンドを実行します:


php 私のアプリ
#!/usr/bin/env php
setDefaultCommand("recipe");

$app->add(new FetchRecipeCommand());


$app->run();

複数のコマンドがある場合は、次のように起動できます:


php m-app レシピ
#!/usr/bin/env php
setDefaultCommand("recipe");

$app->add(new FetchRecipeCommand());


$app->run();

利用可能なコマンドをすべて表示するには:


php マイアプリリスト
#!/usr/bin/env php
setDefaultCommand("recipe");

$app->add(new FetchRecipeCommand());


$app->run();

結論

このアプローチでは、Symfony の HTTP クライアントを使用して外部 API からデータを簡単に取得し、応答を処理し、Twig を使用して構造化された形式で出力をレンダリングできます。この場合、コマンドはレシピをマークダウンとして出力しますが、この手法は処理が必要な他のコンテンツやデータ型に適用できます。

レシピをお楽しみください!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/robertobutti/using-twig-for-rendering-markdown-with-php-2d24?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3