تتيح لك هذه الحزمة إنشاء فئات DTO نظيفة ومستقلة (تسمى أيضًا "كائنات القيمة") بواسطة المخطط المعلن لفترة وجيزة في PHP-Code.
تحتاج فقط إلى هذه الحزمة في بيئة التطوير ، نظرًا لأن الفصول التي تم إنشاؤها لا تستخدم أي شيء من رمز هذه المكتبة. هذا هو السبب في أن الطريقة المفضلة هي تضمينها كما require-dev :
$ composer require --dev klkvsk/dto-generator
Schema هو ملف PHP عادي في أي مكان في مشروعك. يجب أن يقوم الملف بإرجاع كائن Schema من المستوى العلوي.
مثال مخطط:
<?php
use Klkvsk DtoGenerator Schema as dto ;
use Klkvsk DtoGenerator Schema Types as t ;
return dto schema (
namespace: ' MyProjectData ' ,
objects: [
new dto object (
name: ' Person ' ,
fields: [
dto field ( ' name ' , t string (), required: true ),
dto field ( ' age ' , t int (), required: true ),
]
),
]
); يتم توليد الكود باستخدام أمر dto-gen :
$ ./vendor/bin/dto-gen [schema-file]
بشكل افتراضي ، يبحث المولد عن الملفات المسمى أو تنتهي باستخدام dto.schema.php ، ولكن يمكنك توفير ملفات المخطط يدويًا كوسائط.
سيحاول المولد تخمين المسار الصحيح للإخراج من خلال النظر في مسارات التحميل التلقائي في composer.json. إذا كان ينص على رسم خرائط PSR-4 لـ "MyProject\": "src/" ، فسيتم وضع الملف أعلاه في src/Data/Person.php .
لتجاوز هذا السلوك ، يمكنك تحديد outputDir مباشرة:
dto schema (namespace: " MyProject \ Data " , outputDir: " src/generated/ " , ...);لإنشاء رمز يستهدف بعض الحد الأدنى من الإصدار من PHP ، استخدم:
./vendor/bin/dto-gen --target 7.4
يمكّن هذا الخيار أو يعطل بعض ميزات اللغة الأحدث في الكود الناتج.
من الممكن توليد ليس فقط DTOs ، ولكن التعدادات ذات الصلة أيضًا:
dto schema(
objects: [
dto enum (
name: ' PostStatus '
cases: [ ' draft ' , ' published ' , ' deleted ' ]
),
dto object(
name: ' Post ' ,
fields: [
dto field ( ' status ' , t enum ( ' PostStatus ' ), required: true ),
. . .
]
)
]
)بالنسبة إلى php> = 8.0 سيتم إنشاء التعداد الأصلي ، بالنسبة للإصدارات القديمة ، يتم استخدام تنفيذ مماثل على أساس الفصل الدراسي.
تخدم DTOs غرضًا للحفاظ على كتابة بياناتك بقوة. أنواع المخطط هي:
tint ، tbool ، tstring ، tfloat - أنواع القياس الأساسيةtenum ، tobject - للإشارة إلى كائنات DTO الأخرىtdate - باستخدام DateTimeImmutabletexternal - للإشارة إلى أي فئات أخرى غير DTOtlist_(T) - يلف حول النوع t لإعلان t []tmixed - إذا كنت لا تعرف حقًا (حيث t هو الاسم المستعار لـ KlkvskDtoGeneratorSchemaTypes )
أيضًا ، يمكنك تمديد فئة Type التجريدي لاحتياجاتك.
يمكن إنشاء DTOs باستخدام مُنشئ منتظم أو باستخدام طريقة <DTO>::create(array $data) .
طريقة create تقبل صفيف ترابط مع البيانات. ثم يتم ترشيح هذه البيانات (إذا كانت بحاجة إلى بعض التنظيف مسبقًا) واستيرادها (تم تحويلها إلى أنواع مناسبة). بعد ذلك ، تستدعي الطريقة مُنشئًا افتراضيًا ، وتمرير الحقول المستوردة إليه. يحصل المُنشئ على حقول ليس فقط حسب النوع ، ولكن عن طريق منطق مخصص.
لذلك ، هناك ثلاث مراحل من معالجة البيانات ، يمكن وصف كل منها في المخطط مع Callables:
filter بإعداد البيانات المراد استيرادهاimporter بإلقاء قيمة لتصحيح النوع أو إنشاء كائن متداخلvalidator الذي تفي بالقيمة المستوردة معايير محددة يجب أن تُرجع عمليات الإغلاق filter importer القيمة المعالجة. إذا تم إرجاع null ، لا يتم استدعاء الإغلاق الإضافي.
يقوم validator بإرجاع True/False ، وعلى False يتم InvalidArgumentException تلقائيًا. أيضًا ، يمكنك رمي استثناءك الخاص ولا تعيد أي شيء.
يتم تعريف إغلاق filter النوع validator في المخطط:
dtofield('age', tint(),
filters: [ fn ($x) => preg_replace('/[^0-9]+/', $x) ],
validators: [ fn ($x) => $x > 0 && $x < 100 ]
)
إغلاق importer النوع محدد مسبقًا لجميع الأنواع باستثناء tobject :
dtofield('file', texternal(SplFileInfo::class, fn ($x) => new SplFileInfo($x))
يمكنك تحديد مستورد مخصص إذا قمت بتمديد Type لتلبية احتياجاتك الخاصة.
انظر / مثال / dir لمخطط المثال والفئات التي تم إنشاؤها لإصدارات PHP مختلفة.
ترخيص معهد ماساتشوستس للتكنولوجيا (MIT). يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.