MINI هو تطبيق PHP بسيط للغاية وسهل الفهم، وقد تم تقليله إلى الحد الأقصى. MINI ليس إطارًا احترافيًا ولا يأتي مع جميع الأشياء التي تحتوي عليها أطر العمل الحقيقية. إذا كنت تريد فقط عرض بعض الصفحات، وإجراء بعض استدعاءات قاعدة البيانات والقليل من AJAX هنا وهناك، دون قراءة وثائق ضخمة لأطر عمل احترافية معقدة للغاية، فقد تكون MINI مفيدة جدًا لك. تتميز MINI بسهولة التثبيت، وتعمل في كل مكان تقريبًا ولا تجعل الأمور أكثر تعقيدًا من اللازم.
للحصول على مقدمة أعمق عن MINI، قم بإلقاء نظرة على منشور المدونة هذا: MINI، وهو تطبيق PHP بسيط للغاية.
MINI لديها أخ أصغر اسمه TINY. إنه مشابه لـ MINI، ولكنه يعمل بدون mod_rewrite في كل بيئة تقريبًا. غير مناسب للمواقع الحية، ولكنه جيد للنماذج الأولية السريعة.
لدى MINI أيضًا أخ أكبر، اسمه MINI2. إنه أبسط من ذلك، وقد تم تصميمه باستخدام Slim ويحتوي على ميزات رائعة مثل تجميع SASS وTwig وما إلى ذلك.
MINI3 هو خليفة MINI، باستخدام بنية تطبيق MINI1 الأصلية (بدون Slim تحت الغطاء)، ولكن مع التحميل التلقائي المناسب لـ PSR-4 وفئات النماذج المتعددة ومساحات الأسماء الحقيقية.
إذا كنت تستخدم Vagrant لتطويرك، فيمكنك تثبيت MINI بنقرة واحدة (أو أمر واحد في سطر الأوامر) [Vagrant doc]. يأتي MINI مزودًا بملف Vagrant التجريبي (يحدد مربع Vagrant الخاص بك) وbootstrap.sh التجريبي الذي يقوم تلقائيًا بتثبيت Apache وPHP وMySQL وPHMyAdmin وgit وComposer، وتعيين كلمة مرور مختارة في MySQL وPHPMyadmin وحتى داخل رمز التطبيق، يقوم بتنزيل تبعيات Composer، وينشط mod_rewrite ويحرر إعدادات Apache، وينزل الكود من GitHub ويقوم بتشغيل عبارات SQL التجريبية (للعرض التوضيحي بيانات). هذا تلقائي بنسبة 100%، وسينتهي بك الأمر بعد +/- 5 دقائق مع تثبيت MINI2 قيد التشغيل بالكامل داخل صندوق Ubuntu 14.04 LTS Vagrant.
للقيام بذلك، ضع Vagrantfile
و bootstrap.sh
من _vagrant
داخل مجلد (ولا شيء آخر). قم vagrant box add ubuntu/focal64
لإضافة Ubuntu 20.04 LTS 64bit إلى Vagrant (ما لم يكن لديك بالفعل)، ثم قم vagrant up
لتشغيل الصندوق. عند انتهاء التثبيت، يمكنك مباشرة استخدام التطبيق التجريبي المثبت بالكامل على 192.168.33.44
(يمكنك تغيير ذلك في Vagrantfile). نظرًا لأن هذه مجرد بيئة تجريبية سريعة، فقد تم تعيين كلمة مرور جذر MySQL وكلمة مرور جذر PHPMyAdmin على 12345678
، ويتم تثبيت المشروع في /var/www/html/myproject
. يمكنك تغيير هذا بالتأكيد داخل bootstrap.sh
. أغلق الصندوق vagrant halt
يمكنك تثبيت MINI بما في ذلك Apache وMySQL وPHP وPHPMyAdmin وmod_rewrite وComposer وجميع الإعدادات الضرورية وحتى كلمات المرور داخل ملف التكوينات بمجرد تنزيل ملف واحد وتنفيذه، وسيتم تشغيل التثبيت بالكامل بنسبة 100% تلقائيًا. ابحث عن البرنامج التعليمي في مقالة المدونة هذه: قم بتثبيت MINI في 30 ثانية داخل Ubuntu 14.04 LTS
application/config/config.php
_install/
- (باستخدام PHPMyAdmin على سبيل المثال).تعمل MINI دون أي تكوين إضافي. يمكنك أيضًا وضعه داخل مجلد فرعي، وسيعمل دون أي تكوين إضافي. ربما يكون مفيدًا: برنامج تعليمي بسيط حول كيفية تثبيت LAMPP (Linux وApache وMySQL وPHP وPHMyAdmin) على Ubuntu 14.04 LTS ونفس الشيء بالنسبة إلى Ubuntu 12.04 LTS.
server {
server_name default_server _; # Listen to any servername
listen [::]:80;
listen 80 ;
root /var/www/html/myproject/public;
location / {
index index.php;
try_files / $uri / $uri / /index.php?url= $uri ;
}
location ~ .(php)$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
include fastcgi_params;
}
}
يمكن العثور على مناقشة أعمق حول إعدادات nginx هنا.
يستخدم البرنامج النصي mod_rewrite ويمنع الوصول إلى كل شيء خارج المجلد /public. لا يمكن الوصول إلى مجلد/ملفات .git والملفات المؤقتة لنظام التشغيل ومجلد التطبيق وكل شيء آخر (عند الإعداد بشكل صحيح). بالنسبة لطلبات قاعدة البيانات، يتم استخدام PDO، لذلك لا داعي للتفكير في حقن SQL (إلا إذا كنت تستخدم إصدارات MySQL قديمة جدًا).
يأتي MINI مع أداة تصحيح أخطاء PDO مخصصة قليلاً (ابحث عن الكود في application/libs/helper.php)، في محاولة لمحاكاة بيانات PDO-SQL الخاصة بك. إنه سهل الاستخدام للغاية:
$ sql = " SELECT id, artist, track, link FROM song WHERE id = :song_id LIMIT 1 " ;
$ query = $ this -> db -> prepare ( $ sql );
$ parameters = array ( ' :song_id ' => $ song_id );
echo Helper:: debugPDO ( $ sql , $ parameters );
$ query -> execute ( $ parameters );
تمت كتابة المشروع في PHP5 مرات، ولكن مع إصدار PHP7 لم يعد من الممكن تسمية فئة "خطأ" لأن PHP نفسها لديها فئة خطأ داخلية الآن. كانت إعادة التسمية هي الحل الأكثر بساطة، مقارنة بالخيارات الأخرى مثل "ErrorController" وما إلى ذلك والتي من شأنها إضافة مشاكل جديدة مثل أسماء الملفات الكبيرة وما إلى ذلك (والتي لن تعمل بشكل صحيح في بعض الإعدادات).
هذا المشروع مرخص بموجب ترخيص MIT. هذا يعني أنه يمكنك استخدامه وتعديله مجانًا في المشاريع الخاصة أو التجارية.
وبالمناسبة، أنا أيضًا أقوم بالتدوين في Dev Metal.
يُترجم مسار URL الخاص بالتطبيق مباشرة إلى وحدات التحكم (= الملفات) وطرقها داخل التطبيق/وحدات التحكم.
سوف يقوم example.com/home/exampleOne
بتنفيذ ما تقوله طريقة exampleOne() في application/controllers/home.php.
سوف يقوم example.com/home
بتنفيذ ما تقوله طريقة الفهرس () في application/controllers/home.php.
سوف يقوم example.com
بتنفيذ ما تقوله طريقة الفهرس () في application/controllers/home.php (الخيار الاحتياطي الافتراضي).
سوف يقوم example.com/songs
بتنفيذ ما تقوله طريقة الفهرس () في application/controllers/songs.php.
example.com/songs/editsong/17
سيفعل ما تقوله طريقة Editsong() في application/controllers/songs.php وسيمرر 17
كمعامل لها.
شرح الذات، أليس كذلك؟
دعونا نلقي نظرة على طريقة exampleOne() في وحدة التحكم الرئيسية (application/controllers/home.php): يعرض هذا ببساطة الرأس والتذييل وصفحة example_one.php (في طرق العرض/home/). عن طريق النية بسيطة وأصيلة قدر الإمكان.
public function exampleOne ()
{
// load view
require APP . ' views/_templates/header.php ' ;
require APP . ' views/home/example_one.php ' ;
require APP . ' views/_templates/footer.php ' ;
}
دعونا نلقي نظرة على طريقة الفهرس () في وحدة التحكم في الأغاني (application/controllers/songs.php): تشبه exampleOne، ولكن هنا نطلب البيانات أيضًا. مرة أخرى، كل شيء مختصر وبسيط للغاية: $this->model->getAllSongs() يستدعي ببساطة طريقة getAllSongs() في application/model/model.php.
public function index ()
{
// getting all songs and amount of songs
$ songs = $ this -> model -> getAllSongs ();
$ amount_of_songs = $ this -> model -> getAmountOfSongs ();
// load view. within the view files we can echo out $songs and $amount_of_songs easily
require APP . ' views/_templates/header.php ' ;
require APP . ' views/songs/index.php ' ;
require APP . ' views/_templates/footer.php ' ;
}
من أجل البساطة القصوى، جميع أساليب معالجة البيانات موجودة في application/model/model.php. هذا بالتأكيد ليس احترافيًا حقًا، ولكنه أبسط تنفيذ. ألقِ نظرة على الشكل الذي يبدو عليه getAllSongs() في model.php: PDO خالص وبسيط للغاية.
public function getAllSongs ()
{
$ sql = " SELECT id, artist, track, link FROM song " ;
$ query = $ this -> db -> prepare ( $ sql );
$ query -> execute ();
return $ query -> fetchAll ();
}
النتيجة، هنا $songs، يمكن استخدامها بسهولة مباشرة داخل ملفات العرض (في هذه الحالة application/views/songs/index.php، في مثال مبسط):
<tbody>
<?php foreach ( $ songs as $ song ) { ?>
<tr>
<td> <?php if ( isset ( $ song -> artist )) echo htmlspecialchars ( $ song -> artist , ENT_QUOTES , ' UTF-8 ' ); ?> </td>
<td> <?php if ( isset ( $ song -> track )) echo htmlspecialchars ( $ song -> track , ENT_QUOTES , ' UTF-8 ' ); ?> </td>
</tr>
<?php } ?>
</tbody>
MINI هو خليفة php-mvc. نظرًا لأن php-mvc لم يوفر بنية MVC حقيقية (واشتكى العديد من الأشخاص من ذلك - وهذا صحيح تمامًا!) فقد قمت بإعادة تسمية المشروع وإعادة بنائه.
... MINI هي مجرد أداة مساعدة بسيطة قمت بإنشائها لعملي اليومي، وذلك ببساطة لأنه كان من الأسهل بكثير إعدادها والتعامل معها مقارنة بالأطر الحقيقية. بالنسبة للعمل اليومي للوكالة، والنماذج الأولية السريعة والمشاريع التي تعتمد على الواجهة الأمامية، فلا بأس تمامًا، وتقوم بالمهمة وليس هناك أي سبب على الإطلاق لمناقشة سبب كونها "سيئة مقارنة بـ Laravel"، أو لماذا لا تتبع العديد من مبادئ MVC أو لماذا لا يوجد دعم شخصي غير مدفوع الأجر أو لا توجد ترجمة روسية أو أشياء غريبة مماثلة. إن التصيد ضد المشاريع مفتوحة المصدر (ومؤلفيها) قد وصل بالفعل إلى أبعاد جنونية.
لقد كتبت هذا مجانًا، طوعًا، في وقت فراغي وقمت بتحميله على GitHub لمشاركته. إنه مجاني تمامًا، للاستخدام الخاص والتجاري. إذا كنت لا تحب ذلك، لا تستخدمه. إذا رأيت مشكلات، فيرجى كتابة تذكرة (وإذا كنت رائعًا حقًا: فأنا ممتن جدًا لأية التزامات!). لكن لا تهاجم، لا تتذمر، لا تكره. فقط الأشخاص السيئون يفعلون ذلك.
يرجى الالتزام بفرع التطوير (الذي يحمل الإصدار قيد التطوير)، وليس في الفرع الرئيسي (الذي يحمل الإصدار المختبر والمستقر).
ديسمبر 2002
أغسطس 2016
فبراير 2015
ديسمبر 2014
نوفمبر 2014
أكتوبر 2014
سبتمبر 2014
أغسطس 2014
يونيو 2014
أبريل 2014
يناير 2014
ادعم المشروع عن طريق استئجار خادم في DigitalOcean أو مجرد تقديم القهوة على موقع BuyMeACoffee.com. شكرًا! :)