CRUD بسيطة / قابلة لإعادة الاستخدام في PHP (لا توجد شموح أو فئات كبيرة)

StackOverflow https://stackoverflow.com/questions/386838

  •  23-08-2019
  •  | 
  •  

سؤال

أنا أعمل على PHP CMS مثل المشروع وأحاول معرفة ما هي الطريقة الأكثر ملاءمة للتعامل مع وظائف CRUD في PHP.

تم برمجة CMS بالكامل في PHP الإجرائي (بدون OOP - أعرف أن الكثير منكم لن يوافقوا على هذا ...) وتم تصميم كل شيء بسيط وخفيف قدر الإمكان، فضلا عن إنشاء وظائف قابلة لإعادة الاستخدام للغاية وقشرات من التعليمات البرمجية وبعد

يسمح CMS بنود متعددة مثبتة / تنشيطها على أساس الاحتياجات. تصف هذه الوحدات الأنواع المختلفة من المحتوى، لذلك ربما انتهى بي الأمر بالحصول على شيء مثل الصفحات والأخبار والمدونات فقط لتسمية عدد قليل.

لكل نوع من أنواع المحتوى هذه، سيتعين علي إنشاء عمليات CRUD والآن أحاول العثور على الطريقة الأكثر ملاءمة لتحقيق ذلك.

متطلبات واحدة سيكون أن النموذج لكل أنواع من أنواع المحتوى هذه موجودة في ملف خارجي واحد (لكلا إدراج وتحرير) وإذا كان هناك طريقة لإدماج التحقق من صحة الإدخال جانب الخادم الذي سيكون زائد.

هل كانت مفيدة؟

المحلول

بواسطة عمليات CRUD هل تقصد فقط استعلامات قاعدة البيانات (المملة)؟

يمكنك بسهولة إعداد قاعدة البيانات الخاصة بك بسهولة بحيث باستثناء عدد قليل من الحقول الشائعة بين أنواع المحتوى، يتم تخزين جميع البيانات الخاصة بنوع محتوى معين كصفيف إرشاطي متسلسل في حقل نص.

بهذه الطريقة تحتاج فقط إلى مجموعة واحدة من الاستعلامات إلى CRUD أي نوع محتوى معين نظرا لأن البيانات التي تم تمريرها إلى وظائف CRUD هي مجرد تسلسل عمياء.

على سبيل المثال، نقول أننا نعلن أن عنوان المحتوى، الذي تم إنشاؤه / تحديث / تحديث العلامات، ويعتبر وصف قصير بيانات مشتركة. من هناك لدينا بلوق ونوع محتوى الصفحة.

ربما أنشئ جدول قاعدة البيانات على هذا النحو:

CREATE TABLE `content` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR  NOT NULL,
  `short_description` TEXT  NOT NULL,
  `tags` TEXT ,
  `data` TEXT ,
  `content_type` INT  NOT NULL,
  `created_at` DATETIME  NOT NULL,
  `updated_at` DATETIME  NOT NULL,
  PRIMARY KEY (`id`)
)

(المضي قدما ويفترض أننا سنقوم بإنشاء جداول مرجعية للمحتوى_TYPE)

وعلى الرغم من أن المدونة قد تتطلب بيانات مثل "pingbacks"، فقد لا تتطلب الصفحة سوى الجسم، فأنت تخزن فقط إخراج شيء مثل المثال أدناه لمدونة:

$data = serialize(array(
    "body" => "Lorem ipsum",
    "pingbacks" => array()
));

تكون التحديثات سهلة، كلما انتزعت البيانات من قاعدة البيانات التي تقوم فيها بإجراءات التحرير في نموذج محدد بناء على نوع المحتوى. عرض يعمل بنفس الطريقة، فقط الاستيلاء على قالب يعتمد على نوع المحتوى وإرسالها صفيف البيانات غير المهيمية. لا يحتاج القالب أبدا إلى القلق كيف يتم تخزين البيانات، فقط يحصل على بيانات $ ["pingbacks"].

أما بالنسبة لأشكالك، فإن اقتراحي هو كسر عهد OOP الخاص بك وإيجاد مكتبة توليد النموذج. إذا كنت تستطيع استخراجه من الإطار، باستخدام zend_form. مع zend_config. و zend_validate. من zend framework. (جميع zend_config مبالغ في هذه الحالة هي واجهة مريحة لتحميل وتجاوز ملفات XML و INI) يجعل الحياة لطيفة حقا. يمكنك تحديد ملفات XML الخاصة بك نموذج كل نوع محتوى، وكل ما ستفعله هو تقديم النموذج الموجود في صفحتك (الاستيلاء على XML يعتمد على نوع المحتوى)، والاستيلاء على البيانات المرتبطة، وإزالة "الحقول الشائعة" مثل الاسم، تم إنشاؤه / تم تحديثه، ثم تسلسل ما تبقى في قاعدة البيانات. لا يلزم أي معرفة بمخطط نوع محتوى معين (ما لم تكن ترغب في أن تكون صارما).

على الرغم من أنه كشطور شخصيا، سأقترح عليك أن تنظر إلى الاستيلاء على Zend_form (مع zend_validate و zend_config) وكذلك استخدام عقيدة كطبقة تجريد قاعدة بيانات orm / قاعدة البيانات. قد تجد أن عقيدة على الأقل ستجعل حياتك أسهل بكثير عندما يتعلق الأمر بتشغيل العمليات في قاعدة البيانات.

نصائح أخرى

على الرغم من أن شخصيا جانبا، سأقترح عليك أن تنظر في الاستيلاء على Zend_form (مع Zend_Validate و Zend_Config) وكذلك استخدام مذهب كطبقة تجريدية Orm / Database. قد تجد أن عقيدة على الأقل ستجعل حياتك أسهل بكثير عندما يتعلق الأمر بتشغيل العمليات في قاعدة البيانات.

وأنا أتفق مع dcousineau. لماذا لفة خاصة بك عندما يتم بالفعل؟ أود أن ألق نظرة على zend db., ، وإذا كنت بحاجة إلى حل PHP4 و 5 فب adodb..

بدأت مشروع أكاديمي مؤخرا وكان له نفس الرغبة كما أنت؛ في النهاية ذهبت مع php adodb.

أقترح www.ajaxcrud.com - إنها سهلة الاستخدام وخفيفة الوزن وتواجه وتشغيلها في ثوان.

يمكنك تجربة هذا: http://xcrud.com., ، مفيدة حقا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top