العمل مع YAML في PHP: مكتبة Symfony Yaml
\n\nYAML (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\ncomposer require symfony/yaml\n\nبعد التثبيت، قم بتضمين أداة التحميل التلقائي Comporter واستيراد الفئات المطلوبة:
\n\nrequire '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. لنلق نظرة على مثال بتكوين بسيط:
$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\nArray\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() مع المحلل:
$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. هذا مفيد لتوليد التكوينات أو تصدير البيانات:
$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\napp:\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