العمل مع YAML في PHP: المكتبات والأدوات
YAML (YAML Ain't Markup Language) هو تنسيق لتسلسل البيانات، سهل القراءة للبشر. يُستخدم غالبًا لملفات التكوين، تعريف مخططات البيانات، وتبادل المعلومات بين الخدمات. في PHP، توجد عدة طرق للعمل مع YAML: من الإضافات المدمجة (إن وجدت) إلى المكتبات الخارجية القوية. في هذه المقالة، سنشرح بالتفصيل الأدوات الرئيسية، طريقة تثبيتها، وأمثلة عملية.
لماذا نحتاج YAML في PHP؟
يستخدم مطورو PHP YAML بنشاط من أجل:
- ملفات تكوين الأطر (Symfony، Laravel في بعض الحالات)؛
- وصف ترحيلات قواعد البيانات؛
- تخزين الترجمات والتوطين؛
- تحديد هيكل بيانات الاختبار (الفيكستشرات)؛
- إعداد CI/CD (GitLab CI، Ansible).
فهم كيفية تحليل (Parsing) وإنشاء YAML في PHP هو مهارة أساسية لمطور الواجهة الخلفية (Backend) الحديث.
1. الإضافة المدمجة yaml (PECL)
الطريقة الأكثر كفاءة هي استخدام الإضافة yaml، التي يتم تثبيتها عبر PECL. توفر هذه الإضافة دالتين رئيسيتين:
yaml_parse()— تحويل سلسلة YAML إلى مصفوفة PHP؛yaml_emit()— تحويل مصفوفة PHP إلى سلسلة YAML.
التثبيت
pecl install yamlبعد التثبيت، أضف السطر التالي إلى ملف php.ini:
extension=yaml.soمثال على الاستخدام
<?php// تحليل سلسلة YAML$yamlString = "database: host: localhost port: 3306 name: test_db";
$config = yaml_parse($yamlString);echo $config['database']['host']; // localhost
// إنشاء YAML من مصفوفة$data = [ 'app' => [ 'name' => 'MyApp', 'version' => '2.0' ]];
$yamlOutput = yaml_emit($data);echo $yamlOutput;?>2. مكتبة Symfony Yaml (الطريقة الموصى بها)
إذا لم تكن لديك إمكانية تثبيت إضافات PECL (على سبيل المثال، على استضافة مشتركة)، فإن الخيار الأفضل هو مكتبة Symfony Yaml. هي جزء من نظام Symfony البيئي، ولكنها تعمل بشكل ممتاز كمكون مستقل. المكتبة مكتوبة بالكامل بلغة PHP، ولا تتطلب تبعيات خارجية، وتدعم جميع إمكانيات YAML 1.1 و 1.2.
التثبيت عبر Composer
composer require symfony/yamlالفئات الرئيسية
Symfony\\Component\\Yaml\\Yaml— واجهة ثابتة (Static Facade) مع دوالparse()وdump()؛Symfony\\Component\\Yaml\\Parser— فئة للتحليل (Parsing) مع خيارات إضافية؛Symfony\\Component\\Yaml\\Dumper— فئة لإنشاء YAML مع تحكم دقيق في التنسيق.
مثال على تحليل YAML
<?phprequire_once 'vendor/autoload.php';
use Symfony\\Component\\Yaml\\Yaml;
$yamlContent = "server: host: 0.0.0.0 port: 8080 ssl: true";
try { $array = Yaml::parse($yamlContent); print_r($array); // Array ( [server] => Array ( [host] => 0.0.0.0 [port] => 8080 [ssl] => 1 ) )} catch (\\Symfony\\Component\\Yaml\\Exception\\ParseException $e) { echo 'خطأ في تحليل YAML: ' . $e->getMessage();}?>إنشاء YAML (تفريغ) من مصفوفة
<?php$config = [ 'application' => [ 'name' => 'PHP App', 'debug' => true, 'database' => [ 'driver' => 'mysql', 'host' => 'localhost', 'user' => 'root' ] ]];
$yaml = Yaml::dump($config, 3, 2);// الوسيط الثاني — مستوى التداخل (inline)، الثالث — المسافات البادئةecho $yaml;?>نتيجة التنفيذ:
application: name: 'PHP App' debug: true database: driver: mysql