Twig는 Symfony로 웹 애플리케이션을 개발할 때 HTML 렌더링을 위한 유용한 템플릿 엔진입니다.
그러나 Twig의 유연성은 단지 HTML 페이지를 생성하는 것 이상으로 확장됩니다. 이는 동일한 콘텐츠 세트에서 마크다운 파일 생성, JSON 출력, 심지어 일반 텍스트까지 여러 채널에 걸쳐 콘텐츠를 전달하는 강력한 도구가 될 수 있습니다.
이러한 적응성을 통해 다양한 채널을 위한 콘텐츠를 제작할 수 있습니다.
Twig를 사용하여 HTML, Markdown, JSON, 텍스트 등을 생성할 수 있습니다.
이 예에서는 Symfony의 HTTP 클라이언트를 사용하여 외부 API(https://dummyjson.com/recipes/1)에서 레시피를 가져오고 Twig를 사용하여 이를 마크다운 문서로 렌더링합니다.
이 접근 방식은 외부 데이터 검색을 위한 Symfony HTTP 클라이언트 및 뷰 렌더링을 위한 Twig와 같은 Symfony의 강력한 패키지를 결합하여 명령줄 도구의 Markdown 보고서와 같은 여러 채널에 콘텐츠를 제공할 수 있는 방법을 보여줍니다.
우리가 빌드할 명령/스크립트는 API에서 레시피 데이터(제목, 설명, 재료 및 지침)를 가져와 처리한 다음 Twig를 사용하여 구조화된 Markdown 형식으로 콘텐츠를 출력합니다. 이 실제 사용 사례는 웹 템플릿을 넘어 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 명령줄 도구와 같은 일반적인 웹 컨텍스트 외부에서 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);
설명:
사용자가 셸에서 직접 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 템플릿/뷰를 만들어 레시피를 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으로 출력하지만 이 기술은 처리해야 하는 다른 콘텐츠나 데이터 유형에 적용할 수 있습니다.
레시피를 즐겨보세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3