Twig هو محرك قوالب مخصص لعرض HTML عند تطوير تطبيقات الويب باستخدام Symfony.
ومع ذلك، تمتد مرونة Twig إلى ما هو أبعد من إنشاء صفحات HTML فقط. يمكن أن تكون أداة قوية لتوصيل المحتوى عبر قنوات متعددة، مثل إنشاء ملفات Markdown، ومخرجات JSON، وحتى النص العادي، كل ذلك من نفس مجموعة المحتوى.
تتيح لك هذه القدرة على التكيف إنشاء محتوى لقنوات مختلفة.
يمكنك استخدام Twig لإنشاء HTML وMarkdown وJSON والنص وما إلى ذلك
في هذا المثال، نستخدم عميل HTTP الخاص بـ Symfony لجلب وصفة من واجهة برمجة تطبيقات خارجية (https://dummyjson.com/recipes/1) وعرضها كمستند Markdown باستخدام Twig.
يوضح هذا الأسلوب كيف يمكنك الجمع بين حزم Symfony القوية، مثل عميل Symfony HTTP لاسترداد البيانات الخارجية وTwig لعرض طرق العرض، لتقديم المحتوى عبر قنوات متعددة، مثل تقارير 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 -مع-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.
لاستخدام Twig خارج سياق الويب النموذجي، كما هو الحال في أداة سطر أوامر PHP، تحتاج أولاً إلى تهيئته يدويًا عبر فئة 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؛ بل نقوم ببناء برنامج نصي PHP باستخدام حزم Symfony.)
في دليل المشروع، حيث يوجد ملف الملحن.json وحيث يوجد دليل src، يمكنك إنشاء ملف تطبيقي.
#!/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 لعرض البيانات التي تم استردادها بواسطة واجهة برمجة التطبيقات.
بعد ذلك، قم بإنشاء قالب/عرض 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
باستخدام هذا الأسلوب، يمكنك بسهولة استرداد البيانات من واجهة برمجة التطبيقات الخارجية باستخدام عميل HTTP الخاص بـ Symfony، ومعالجة الاستجابة، وتقديم الإخراج بتنسيق منظم باستخدام Twig. في هذه الحالة، يُخرج الأمر وصفة كـ Markdown، ولكن يمكن تكييف هذه التقنية مع أي محتوى أو نوع بيانات آخر تحتاج إلى معالجته.
استمتع بوصفتك!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3