"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP로 Markdown을 렌더링하기 위해 Twig 사용하기

PHP로 Markdown을 렌더링하기 위해 Twig 사용하기

2024-11-08에 게시됨
검색:297

Using Twig for rendering Markdown with PHP

Twig는 Symfony로 웹 애플리케이션을 개발할 때 HTML 렌더링을 위한 유용한 템플릿 엔진입니다.
그러나 Twig의 유연성은 단지 HTML 페이지를 생성하는 것 이상으로 확장됩니다. 이는 동일한 콘텐츠 세트에서 마크다운 파일 생성, JSON 출력, 심지어 일반 텍스트까지 여러 채널에 걸쳐 콘텐츠를 전달하는 강력한 도구가 될 수 있습니다.

이러한 적응성을 통해 다양한 채널을 위한 콘텐츠를 제작할 수 있습니다.

Twig를 사용하여 HTML, Markdown, JSON, 텍스트 등을 생성할 수 있습니다.

사용 사례: Symfony를 사용하여 레시피를 Markdown으로 가져오고 렌더링

이 예에서는 Symfony의 HTTP 클라이언트를 사용하여 외부 API(https://dummyjson.com/recipes/1)에서 레시피를 가져오고 Twig를 사용하여 이를 마크다운 문서로 렌더링합니다.
이 접근 방식은 외부 데이터 검색을 위한 Symfony HTTP 클라이언트 및 뷰 렌더링을 위한 Twig와 같은 Symfony의 강력한 패키지를 결합하여 명령줄 도구의 Markdown 보고서와 같은 여러 채널에 콘텐츠를 제공할 수 있는 방법을 보여줍니다.

우리가 빌드할 명령/스크립트는 API에서 레시피 데이터(제목, 설명, 재료 및 지침)를 가져와 처리한 다음 Twig를 사용하여 구조화된 Markdown 형식으로 콘텐츠를 출력합니다. 이 실제 사용 사례는 웹 템플릿을 넘어 Twig를 사용하여 다양한 형식의 콘텐츠를 생성하는 데 활용하는 방법을 보여줍니다.

그래서 우리는 다음을 사용할 것입니다:

  • Symfony 콘솔 명령줄 도구 구축을 위한 구성 요소 https://symfony.com/doc/current/comComponents/console.html
  • Symfony HTTP 클라이언트 HTTP API 가져오기 및 사용을 위한 https://symfony.com/doc/current/http_client.html
  • Symfony Twig https://twig.symfony.com/doc/3.x/intro.html#데이터 렌더링을 위한 설치
  • 레시피 API: 하나의 "더미" 레시피(https://dummyjson.com/recipes/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단계: 나뭇가지 환경 로드

PHP 명령줄 도구와 같은 일반적인 웹 컨텍스트 외부에서 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 환경은 나중에 사용하기 위해 $this->twig에 할당됩니다(execute() 메서드에서).

2단계: HTTP 클라이언트 초기화 및 레시피 가져오기

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

설명:

  • Symfony HTTP 클라이언트는 명령이 HTTP 요청을 수행할 수 있도록 하는 HttpClient::create() 메서드를 사용하여 생성됩니다.
  • 레시피를 가져오기 위해 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 콘텐츠(render() 메서드에서 반환된 문자열)는 $markdownOutput 변수에 저장됩니다.

5단계: 생성된 Markdown에 대한 출력 생성

$output->writeln($markdownOutput);

설명:

  • 최종 Markdown 콘텐츠는 $output->writeln() 메서드를 사용하여 콘솔에 인쇄됩니다. 이 방법은 문자열을 콘솔에 출력하여 사용자가 Markdown 형식의 형식화된 레시피를 볼 수 있도록 합니다(결국 출력을 셸의 파일로 리디렉션할 수 있습니다).

시작 파일 만들기

사용자가 셸에서 직접 Symfony 명령을 실행할 수 있도록 하려면 시작 파일을 만들어야 합니다. (이 기사에서는 Symfony 애플리케이션을 만드는 것이 아니라 Symfony 패키지를 사용하여 PHP 스크립트를 작성하는 것입니다.)
Composer.json 파일이 있는 프로젝트 디렉터리와 src 디렉터리가 있는 프로젝트 디렉터리에 my-app 파일을 생성할 수 있습니다.

#!/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

이제 API로 검색된 데이터를 렌더링하기 위해 Twig 템플릿/뷰를 생성해야 합니다.

레시피에 대한 Twig 템플릿/뷰 만들기

다음으로 Twig 템플릿/뷰를 만들어 레시피를 Markdown 형식으로 렌더링합니다.
이 템플릿은 views 디렉터리(예: 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 보기 파일은 레시피 이름, 재료 및 지침에 대한 섹션이 포함된 마크다운 형식으로 레시피를 렌더링합니다.

명령 실행

명령어를 실행하려면 터미널에서 다음을 실행하세요.

php my-app

명령이 두 개 이상인 경우 다음을 실행할 수 있습니다.

php m-app recipe

사용 가능한 모든 명령을 보려면:

php my-app list

결론

이 접근 방식을 사용하면 Symfony의 HTTP 클라이언트를 사용하여 외부 API에서 쉽게 데이터를 검색하고, 응답을 처리하고, Twig를 사용하여 구조화된 형식으로 출력을 렌더링할 수 있습니다. 이 경우 명령은 레시피를 Markdown으로 출력하지만 이 기술은 처리해야 하는 다른 콘텐츠나 데이터 유형에 적용할 수 있습니다.
레시피를 즐겨보세요!

릴리스 선언문 이 글은 https://dev.to/robertobutti/using-twig-for-rendering-markdown-with-php-2d24?1에서 복제됩니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3