0

0

使用 Twig 通过 PHP 渲染 Markdown

碧海醫心

碧海醫心

发布时间:2024-10-15 08:15:08

|

906人浏览过

|

来源于dev.to

转载

使用 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 命令。

立即学习PHP免费学习笔记(深入)”;

如果您想了解有关如何使用 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;

说明:

独响
独响

一个轻笔记+角色扮演的app

下载
  • 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,但此技术可以适用于您需要处理的任何其他内容或数据类型。
享受你的食谱!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2896

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1734

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1566

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

1099

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1546

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1277

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1669

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1309

2023.11.13

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

14

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.4万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

第二十三期_PHP编程
第二十三期_PHP编程

共93课时 | 6.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号