العمل مع YAML في PHP: مكتبة Symfony Yaml وتحليل البيانات

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع YAML في PHP: مكتبة Symfony Yaml

\n\n

YAML (YAML Ain't Markup Language) هو تنسيق لتسلسل البيانات يُستخدم غالبًا في ملفات التكوين، ووصف هياكل البيانات، وتبادل المعلومات بين الخدمات. في PHP، توجد عدة حلول للعمل مع YAML، لكن المكون الأكثر شيوعًا ووظيفية هو Symfony Yaml. فهو يوفر طرقًا ملائمة لتحليل (قراءة) وتفريغ (كتابة) بيانات YAML، ويدعم جميع مواصفات YAML 1.2، وهو مدمج في العديد من الأطر مثل Laravel و Symfony.

\n\n

في هذه المقالة، سنشرح بالتفصيل عملية التثبيت، والعمليات الأساسية، والميزات المتقدمة لمكتبة Symfony Yaml. ستتعلم كيفية تحويل YAML إلى مصفوفات PHP والعكس، بالإضافة إلى كيفية التعامل مع الهياكل المعقدة.

\n\n

تثبيت المكتبة

\n\n

يتم تثبيت Symfony Yaml عبر Composer. نفذ الأمر التالي في جذر مشروعك:

\n\n
composer require symfony/yaml
\n\n

بعد التثبيت، قم بتضمين أداة التحميل التلقائي Comporter واستيراد الفئات المطلوبة:

\n\n
require 'vendor/autoload.php';\n\nuse Symfony\\Component\\Yaml\\Yaml;\nuse Symfony\\Component\\Yaml\\Exception\\ParseException;
\n\n

العمليات الأساسية

\n\n

تحليل سلسلة YAML

\n\n

تقوم طريقة Yaml::parse() بتحويل سلسلة YAML إلى مصفوفة PHP. لنلق نظرة على مثال بتكوين بسيط:

\n\n
$yamlString = "\ndatabase:\n    host: localhost\n    port: 3306\n    name: mydb\n    user: admin\n    password: secret\n";\n\ntry {\n    $data = Yaml::parse($yamlString);\n    print_r($data);\n} catch (ParseException $e) {\n    echo 'خطأ في تحليل YAML: ' . $e->getMessage();\n}
\n\n

النتيجة:

\n\n
Array\n(\n    [database] => Array\n        (\n            [host] => localhost\n            [port] => 3306\n            [name] => mydb\n            [user] => admin\n            [password] => secret\n        )\n)
\n\n

تحليل ملف YAML

\n\n

غالبًا ما يتم تخزين YAML في ملفات. لقراءتها، استخدم file_get_contents() مع المحلل:

\n\n
$yamlFile = __DIR__ . '/config.yaml';\nif (!file_exists($yamlFile)) {\n    die('ملف التكوين غير موجود');\n}\n\ntry {\n    $config = Yaml::parse(file_get_contents($yamlFile));\n    echo 'مضيف قاعدة البيانات: ' . $config['database']['host'];\n} catch (ParseException $e) {\n    echo 'خطأ في قراءة الملف: ' . $e->getMessage();\n}
\n\n

تفريغ (كتابة) إلى YAML

\n\n

تقوم طريقة Yaml::dump() بتحويل مصفوفة PHP مرة أخرى إلى سلسلة YAML. هذا مفيد لتوليد التكوينات أو تصدير البيانات:

\n\n
$data = [\n    'app' => [\n        'name' => 'MyApp',\n        'version' => '1.0.0',\n        'debug' => true,\n        'modules' => ['auth', 'api', 'admin']\n    ]\n];\n\n$yamlOutput = Yaml::dump($data, 3); // المعامل الثاني هو مستوى التداخل\nfile_put_contents('app_config.yaml', $yamlOutput);\necho $yamlOutput;
\n\n

النتيجة في الملف:

\n\n
app:\n    name: MyApp\n    version: '1.0.0'\n    debug: true\n    modules:\n        - auth\n        - api\n        - admin
\n\n

الميزات المتقدمة

\n\n

التعامل مع الهياكل المتداخلة والأنواع الخاصة

\n\n

يدعم Symfony Yaml التداخل بأي عمق، بالإضافة إلى أنواع البيانات الخاصة مثل التواريخ، والقيم الفارغة، والقيم المنطقية:

\n\n
$complexYaml = "\nserver:\n    host: 192.168.1.1\n    ports:\n        - 80\n        - 443\n        - 8080\n    settings:\n        timeout: 30\n        enabled: true\n        description: ~\n        created_at: 2024-01-15\n";\n\n$parsed = Yaml::parse($complexYaml);\nvar_dump($parsed['server']['settings']['enabled']); // bool(true)\nvar_dump($parsed['server']['settings']['description']); // NULL\nvar_dump($parsed['server']['settings']['created_at']); // string(10) "2024-01-15"
\n\n

علامات التحليل المخصصة

\

توصيات