
MVPHP هو إطار بسيط يمكن اختراقه بسهولة لتطوير تطبيقات الويب PHP القابلة للحياة. تحتوي العديد من أطر عمل PHP على منحنى تعليمي حاد وقد استخلصت بعمق وظائفها. تم تصميم MVPHP للحفاظ على الأمور بسيطة وسهلة وأقرب إلى PHP النقي. كما يوفر تنفيذًا بسيطًا وقابل للتخصيص لـ Bootstrap لكي تبدأ في إنشاء واجهة أمامية دون الكثير من المتاعب.
ما يتضمن:
ما ليس:
MVPHP ليس إطارًا قويًا وممتازًا جيدًا مثل Laravel و Symfony و Zend ، وما إلى ذلك. هذا الإطار مخصص لتطبيقات Web PHP التي تم تطويرها بسرعة مع الحد الأدنى من الآراء ، والآراء القليلة ، والكثير من المرونة. استخدمه على مسؤوليتك الخاصة! يرجى إنشاء مشكلة إذا واجهت خطأ أو لديك أي اقتراحات.
composer install في جذر المشروع.npm install -g gulp-cli لتثبيت Gulp Cli على مستوى العالمnpm install في جذر المشروع لتثبيت الأدوات التي سنحتاج إلى إنشاء الملفات الأمامية.gulp لإنشاء الملفات الأمامية.public .الفكرة الأساسية وراء هذا الإطار هي البدء بفئة واحدة بسيطة ستتعامل مع جميع الوظائف الأساسية.
app.php هو ملف bootstrap الذي يقوم أولاً بتحميل إعدادات config.php الخاصة بنا ، ثم يقوم بتثبيت فئتنا الرئيسية عن طريق إنشاء كائن $app . يتم إنشاء كائن $auth أيضًا لجميع الوظائف المتعلقة بالمصادقة. نشير إلى خاصية لكائننا الرئيسي ( $app->auth ) للرجوع إلى $auth من أجل الحفاظ على الأمور بسيطة وجعلها في متناول $app .
$ app = new MVPHP (); تقريبًا كل ما نقوم به سيستخدم كائن $app هذا.
يتطلب app.php أيضًا ملف routes.php في دليل الجذر ، حيث سنحدد طرقنا الأولية. سترى العديد من أمثلة العمل في هذا الملف.
هناك بعض الطرق لتحديد المسار وما ينبغي أن يفعله:
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff here
}); الإغلاق هو دالة مجهولة المصدر يتم تشغيلها عندما يتطابق طلب URI مع المسار. من أجل أن تكون الأساليب في فئة MVPHP الرئيسية لدينا يمكن الوصول إليها داخل هذه الوظيفة المجهولة ، نحدد use ($app) . سيؤدي ذلك إلى استيراد متغير $app إلى نطاق متغير الوظيفة المجهول.
$ app -> route ( ' /example/{id} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});يمكنك الإشارة إلى معلمات متغيرة في URI مع قوسين. يتم تحديدها في صفيف ترابط مع المفتاح هو الاسم المحدد في المسار والقيمة هي القيمة الفعلية المقدمة في طلب URI.
$ app -> route ( ' /example/{id:int} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});يمكنك أيضًا تحديد قيود مطابقة معلمات URI باستخدام القولون متبوعًا بنوع القيد. سيؤدي ترك قيمة القيد إلى الافتراضي إلى قيد "السلسلة".
خيارات القيد:
أمثلة تعبير منتظمة:
أي تعبير يعمل مع وظيفة preg_match الخاصة بـ PHP ستعمل هنا. هذه الأداة مفيدة لاختبار التعبيرات قبل تنفيذها.
// This example requires the ID value to be a 5 digit number
$ app -> route ( ' /example/{id:regex=^[0-9]{5}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
});
// This example requires the ID to be lower or uppercase letters between 1-10 characters long
$ app -> route ( ' /example/{id:regex=^[a-zA-Z]{1,10}$} ' , function ( $ params ) use ( $ app ) {
echo $ params [ ' id ' ];
}); $ app -> route ( ' /example ' ); في بعض الأحيان ، سيكون لتطبيقك الكثير من الطرق وتفضل تنظيمها في ملفات منفصلة أكثر من أن يكون كلها في ملف routes.php .
إذا قمت بتسجيل مسار مثل هذا ، فسيبحث MVPHP عن ملف مرتبط بنفس الاسم في دليل controllers . في المثال أعلاه ، سيبحث مسار مسجل إلى /example على ملف example.php في دليل وحدات التحكم ويتطلب ذلك.
الآن ، يمكنك تسجيل المزيد من الطرق المتعلقة بـ /example على نقاط النهاية في ملف example.php . على سبيل المثال ، يمكن أن يبدو ملف controllers/example.php هكذا:
// Reiterate this route and do something with it this time
$ app -> route ( ' /example ' , function () use ( $ app ) {
// Do stuff
});
// Register any other related route endpoints here
$ app -> route ( ' /example/stuff ' , function () use ( $ app ) {
// Do stuff
});إذا كنت ترغب في استخدام ملف معين يحمل اسمًا مختلفًا ، فما عليك سوى تحديده كمعلمة ثانية:
$ app -> route ( ' /example ' , ' myfile ' ); سيحاول هذا طلب controllers/myfile.php .
يتم تعريف مفهوم الطرق ووحدات التحكم والنماذج بشكل فضفاض للغاية في هذا الإطار. نتجنب استخدام مجموعة من الفئات المختلفة من أجل البساطة. يجب أن تكون وحدة التحكم ، في سياق هذا الإطار ، مكانًا للتوسط بين الطلبات والوظائف التي حددها النموذج.
انظر إلى الملفات في دليل controllers للحصول على أمثلة.
يمكننا اختبار طرق الطلب المختلفة باستخدام طريقة action :
$ app -> route ( ' /example ' , function () use ( $ app ){
if ( $ app -> action ( ' post ' ) ) {
// Do stuff on POST
} elseif ( $ app -> action ( ' get ' ) ) {
// Do stuff on GET
}
}); يتم تخزين قوالب العرض في دليل views . يمكننا استدعاء عرض (عادة من وحدة تحكم) مثل هذا:
$ app -> view ( ' my-template ' ); هذا ببساطة يبحث عن my-template.php في مجلد المشاهدات ويتطلب الملف. إذا كان لدينا متغيرات في ملف القالب ، فيجب علينا نقلها إلى طريقة العرض مثل هذا:
$ my_var1 = ' Stuff I want to echo in the template. ' ;
$ app -> view ( ' my-template ' , [
' my_var1 ' => $ my_var1
]); الآن يمكن الوصول إلى $my_var1 داخل ملف قالب العرض.
نحن لا نزعج محرك templating (لأن PHP هي بطبيعتها لغة templating). ما عليك سوى الوصول إلى المتغيرات في HTML مثل هذا:
< p > < ?=$my_var1;? > </ p >البيانات الشرطية:
< ?php if ( isset($my_var1) ):? >
< p > < ?=$my_var1;? > </ p >
< ?php endif;? >تحصل على الفكرة. نقي وبسيط php templating.
بشكل افتراضي ، تستخدم الواجهة الأمامية bootstrap. يمكنك العثور على جميع الملفات المصدر في دليل frontend . يتم تعريف الإرشادات اللازمة لإنشاء ملفات المصدر من مجلد frontend في ملف gulpfile.js في جذر المشروع.
عندما تقوم بتشغيل gulp لأول مرة في جذر المشروع ، تم دمج ملفات SCSS و JavaScript ، ومُعجّنة ، ونسخها إلى المجلد public . يتم نسخ ملفات البائع JS و CSS التي نستخدمها (jQuery ، Bootstrap ، وما إلى ذلك) إلى المجلد public .
قبل تحرير ملفات SCSS و JavaScript في دليل frontend ، يمكنك تشغيل gulp watch في جذر المشروع. سوف يراقب Gulp أي تغييرات تقوم بحفظها على الملفات وحفظها كما تذهب.
توفر فئة models/Documents.php طريقة واحدة لكتابة ملف PDF من مصدر HTML. يستخدم هذا الفئة WKHTMLTOPDF وقد تتطلب منك تثبيت هذه التبعيات قبل أن تعمل:
sudo apt-get install xfonts-base xfonts-75dpi urw-fonts
سيتم إضافة المزيد من PDF وغيرها من الوظائف ذات الصلة في المستقبل.
حفر بشكل أعمق في طرق الأداة المساعدة الأخرى المتاحة من خلال النظر إلى ملف models/MVPHP.php ، والذي يحتوي على فئتنا الرئيسية. سيتم إضافة المزيد في المستقبل!