当前位置:首页 > 文章列表 > 文章 > php教程 > 使用 Twig 通过 PHP 渲染 Markdown

使用 Twig 通过 PHP 渲染 Markdown

来源:dev.to 2024-10-28 09:10:07 0浏览 收藏

在文章实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《使用 Twig 通过 PHP 渲染 Markdown》,聊聊,希望可以帮助到正在努力赚钱的你。

使用 Twig 通过 PHP 渲染 Markdown

twig 是使用 symfony 开发 web 应用程序时渲染 html 的首选模板引擎。
然而,twig 的灵活性不仅仅限于生成 html 页面。它可以成为跨多个渠道交付内容的强大工具,例如生成 markdown 文件、json 输出,甚至纯文本,所有这些都来自同一组内容。

这种适应性使您可以为不同的频道创建内容。

您可以使用 twig 生成 html、markdown、json、文本等

用例:使用 symfony 获取并渲染配方为 markdown

在此示例中,我们使用 symfony 的 http 客户端从外部 api (https://dummyjson.com/recipes/1) 获取配方,并使用 twig 将其呈现为 markdown 文档。
这种方法展示了如何结合 symfony 强大的软件包(例如用于外部数据检索的 symfony http 客户端和用于渲染视图的 twig)来跨多个渠道交付内容,例如命令行工具中的 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#installation 用于渲染数据
  • 菜谱api:我们将选择一个“虚拟”菜谱 https://dummyjson.com/recipes/1 来展示和演示检索结构化 json 并将其转换为 markdown 文件的过程.

安装必要的 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环境

要在典型的 web 上下文之外使用 twig,例如在 php 命令行工具中,首先需要通过 twigenvironment 类手动初始化它。以下是控制台命令中 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 环境是通过创建一个 filesystemloader 来初始化的,该 filesystemloader 告诉 twig 在哪里可以找到模板。本例指向存储 twig 模板的 src/resources/views 文件夹。
  • 然后,$twig 环境被实例化并负责渲染模板。可以启用可选缓存,通过存储预编译模板来提高性能。
  • 最后将初始化的$twig环境赋值给$this->twig以供后续使用(在execute()方法中)。

第 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 响应。

第三步:获取信息数组

$recipedata = $response->toarray();

说明:

  • toarray() 方法将 api 的 json 响应转换为 php 数组。该数组包含食谱的数据(例如名称、成分、说明),这些数据将用于在下一步中填充 twig 模板。

第四步:使用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 步:为生成的 markdown 生成输出

$output->writeln($markdownoutput);

说明:

  • 最终的 markdown 内容使用 $output->writeln() 方法打印到控制台。该方法将字符串输出到控制台,允许用户以 markdown 格式查看格式化的菜谱(最终,您可以将输出重定向到 shell 中的文件中)。

创建启动文件

您必须创建一个启动文件以允许用户直接从 shell 启动您的 symfony 命令。 (在本文中,我们不是创建 symfony 应用程序;我们正在使用 symfony 包构建 php 脚本。)
在项目目录中,您有composer.json文件和src目录,您可以创建一个my-app文件。

#!/usr/bin/env php
setdefaultcommand("recipe");

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


$app->run();

要正确使用命名空间和类,请务必在composer.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 模板/视图

接下来,创建一个 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

结论

通过这种方法,您可以使用 symfony 的 http 客户端轻松地从外部 api 检索数据、处理响应并使用 twig 以结构化格式呈现输出。在本例中,该命令将配方输出为 markdown,但此技术可以适用于您需要处理的任何其他内容或数据类型。
享受你的食谱!

本篇关于《使用 Twig 通过 PHP 渲染 Markdown》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于文章的相关知识,请关注golang学习网公众号!

版本声明
本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
如何确认服务提供者是否正确注册到 Zookeeper 注册中心?如何确认服务提供者是否正确注册到 Zookeeper 注册中心?
上一篇
如何确认服务提供者是否正确注册到 Zookeeper 注册中心?
md711值得入手吗?
下一篇
md711值得入手吗?
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    24次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    38次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    38次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    50次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    41次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码