بصورة افتراضية تمت هيكلة تطبيق لارفل ليزودك بنقطة بداية ممتازة وسهلة للمشاريع الصغيرة والكبيرة ، ولكن يمكنك القيام باعادة هيكلة التطبيق والملفات بالصورة التي تناسبك، لارفل لا يقوم بفرض اي قيود على اماكن وجود الكلاسات في التطبيق طالما ان الcomposer يمكنه القيام بالتضمين التلقائي لهذه الكلاسات.
عند البدأ في تطوير تطبيقات لارفل يحتار عدد من المبرمجين عن مكان المجد
models. لقد وجدنا ان كلمة "models" لها معاني مختلفة عند المبرمجين . فبعضهم يستعمل كلمة "model" للاشارة الى bussiness logic ، في حين ان الاخرين يستخدمون نفس الكلمة للاشارة الى الكلاسات والواجهات التي تتفاعل مع قواعد البيانات العلائقية
لهذا السبب ، اخترنا ان نضع ال Eloquent (والمقصود به المعنى الثاني لكلمة model)
داخل المجلد app بصورة افتراضية ، مع امكانية تغير مكانه حسب ما يريد المبرمج
المجلد app يحتوي على الاكواد الفعلية لتطبيق لارفل ، وسنقوم بتفصيل هذا المجلد قريبا ، تقريبا جميع الكلاسات في تطبيق لارفل توجد داخل هذا المجلد
المجلد bootstrap يحتوي على الملف app.php وهو الملف الذي يقوم باجراء العمليات الاولية لاطار العمل، هذا المجلد ايضا يحتوي علي المجلد cache والذي يحوي جميع الملفات التي يقوم اطار العمل بإنتاجها وحفظها ليعمل التطبيق بصورة افضل ، حيث يتم تخزين المسارات والاعدادات المحفوظة فيه ليعمل التطبيق بصورة افضل.
المجلدconfig
كما تمت تسميته ، يحتوي على جميع ملفات اعدادات التطبيق، ننصحك وبشدة ان تقوم بالقاء نظرة على الملفات الموجودة داخل هذا المجلد واستعراض الخيارات الموجودة داخلها.
المجلدdatabase يحتوي على الملفات الخاصة بقواعد البيانات مثل migrations (وهي كلاسات تمثل تصميم جداول قواعد البيانات) ، وكذلك model factories (وهي عبارة كلاسات تستخدم لانشاء قيم ابتدائية في جداول قواعد البيانات) ، والseeds (وهي كلاسات تستخدم لتعبئة الجداول بمحتوى مؤقت ليساعدك اثناء تطوير التطبيق )
،
كما يمكن ان تستخدم هذا المجلد لتخزين قواعد البيانات مثل SQLite
المجلد public يحتوي على الملف index.php
والذي هو مدخل عمل التطبيق حيث يتم تحويل جميع طلبات تصفح التطبيق اليه ويقوم بتحميل اعدادات التطبيق ، كما يحتوي هذا المجلد على ال assets مثل الصور وملفات ال javascript وcss
المجلد resources
يحتوى على views (واجهات التطبيق) كما يحتوي علي ملفات الraw مثل sass, less او javascript ، كما يتضمن هذا المجلد جميع ملفات الترجمة .
المجلدroutes
يحتوي علي جميع ملفات تعريف المسارات لتطبيقك ، بصورة افتراضية يتضمن تطبيق اللارفل عدة ملفات لتعريف المسارات web.php, api.php, console.php و channels.php.
الملف web.php
يحتوي المسارات التي قام الكلاس RouteServiceProvider بوضعها في middleware
المسمى web
(middleware هو عبارة كلاس يعمل يستخدم لتطبيق قيود على طلب التصفح http request )
حيث ان الmiddleware web يذود التعامل مع seesion (الجلسات) , csrf protection (آلية للحماية من ثغرات csrf) وتشفير الكوكيز ،اذا لم تريد ان تقوم ببناء api داخل التطبيق الخاص بك يفترض ان تضع كافة مسارات المشروع الخاص بك داخل الملف web.php
الملف api.php
يحتوي المسارات التي قام الكلاس RouteServiceProvider بوضعها داخل الmiddlware المسمى api حيث يوفرrate limiting والمقصود بها انها ذات وصول محدد ، حيث ان المسارات التي يتم تعريفها تحت الmiddlware المسى web تستخدم الtoken في عملية authenticated (التوثيق) ولا يمكنها التعامل مع الجلسات .
الملف console.php هو المكان الذي يتم فيه تعريف كافة دوال تنفيذ الاوامر ، او ما يمسمى Closure (مفهوم برمجي يرمز الى دالة داخل دالة) ، حيث ان كل Closure تقوم بتعريف امر معين يتم تنفيذه بصورة سهلة جدا، هذا الملف لايتعامل مع طلبات http ، فقط يقوم بتعريف مسارات لاوامر يتم تفيذها داخل التطبيق
الملف channels.php
الملف هو المكان الذي يمكنك فيه تسجيل جميع قنوات بث الأحداث التي يدعمها تطبيقك.
المجلد storage
يحتوي على جميع الواجهات بعد ان يقوم اطار العمل بترجمتها ، كما تحتوى على ملفات الجلسات في حالة تم اعداد الجلسات ليتم. تخزينها في الملفات ، وكذا مجموعة من الملفات الاخرى التي تم انتاجها بواسطة اطار العمل ، هذا المجلد تم تقسيمه المجلدات app, framework, و logs
المجلد app
قد يتم استخدامه لتخزين الملفات التي انتاجها بواسطة التطبيق ، المجلد framework
يستخدم لتخزين الملفات التي يتم انتاجها بواسطة اطار العمل مثل الملفات والcaches .
اخيراً المجلد logs
يتم استخدامه لتخزين جميع ملفات الlogs
المجلد storage/app/public
قد تستخدمه لتخزين الملفات المدرجة بواسطة المستخدمين ، مثل صور البروفايلات ،ويجب ان يكون هذا المجلد عاماً (قابلاً للوصول) حتى نستطيع الوصول لهذه الملفات، ويتم ذلك عبر ربطه بالمجلد public الموجود في المجلد الرئيسي للمشروع ويتم ذلك عبر وضع اختصار داخل المجد public يشير الى المجلد storage/app/public وتتم هذه العملية عبر استخدام الامر php artisan storage:link.
المجلد tests
يحتوي على الاختبارات الآلية الخاصة بك ، على سبيل المثال PHPUnit يأتي بصورة افراضية مع اللارفل
وكل كلاس داخل هذا المجلد يجب ان يكون اسمه ملحقاً بالكلمة Test (مثال UserTest.php) ، يمكنك ان تقوم بتنفيذ الاختبارات الالية التي قمت بكتابتها عبر تنفيذ الامر phpunit او php vendor/bin/phpunit.
المجلد vendor يحتوي على المكتبات والاضافات التي تم تثبيتها بواسطة Composer.
اغلب الاكواد والكلاسات التي تتعامل معها يتم وضعها داخل المجلد app ، بصورة افتراضية الnamespace لهذا الملف هو App وذلك باستخدام التضمين التلقائي في Composer عبر PSR-4 autoloading standard.
المجلد app
يحتوي مجموعة متنوعة من المجلدات الفرعية مثل Console, Http, و Providers.
تعامل مع المجلدين الConsole و Http
كواجهة برمجية لنواة التطبيق ، برتكول الHTTP و CLI هما وسيلتان للتواصل مع تطبيقك ، ولكنها لا يعنيان انهما الاكواد بعينهما ، بمعنى اخر هما طريقتان لاصدار الاوامر لتطبيقك ، المجلد Console يحتوي كل اوامر الArtisan ، بينما المجلدHTTP يحتوي controllers (المتحكمات) ، middleware و الrequests .
هنالك العديد من المجلدات الفرعية التي يتم انتاجها داخل المجلد app باستخدام الامر make وهو احد اوامر ال Artisan ، يمكنك استخدام هذا الامر لانتاج المجلدات مثلا يمكن انشاء مجلد app/Jobs بتنفيذ الامر make:job لانتاج كلاس لjob
{tip} عدد كبير جدا من الكلاسات الموجودة داخل المجلد
appيمكن انتاجها بواسطة اوامر الArtisan ، يمكنك الاطلاع على هذه الاوامر عن طريق تنفيذ الامرphp artisan list makeفي اداة تنفيذ الاوامر
المجلدBroadcasting
يحتوي جميع الكلاسات الخاصة broadcast channel (قنوات البث ) ، هذه الكلاسات يتم انتاجها عبر الامر make:channel ، بصورة افتراضية هذا المجلد غير موجود ، ولكن سيتم انشاءه عن انشاء اول كلاس قناة بث ، يمكن التعرف على المزيد من التفاصيل الخاصة بكلاسات قنوات البث داخل event broadcasting.
المجلد Console
يحتوي كافة اوامر ال Artisan التي تقوم بانشاءها ، حيث يمكن انشاء امر Artisan باستخدام الامر make:command.
هذا المجلد يتحوي ايضا على console kernel الخاصة بك وهي المكان الذي يتم تسجيل الاوامر التي قمت بانشاءها ، بالاضافة الى scheduled tasks التي تم تعريفها.
هذا المجلد غير موجود بصورة افتراضية . ويمكن انشاءه باستخدام الامر event:generate و make:event ، هذا المجلد يحتوي على الevent classes.
وهي عبارة كلاسات تسخدم للقيام ببعض الاشياء عن وقوع حدث ما ، توفر اليها مرنة جدا في التعامل ( مثلا ان يتم استدعاء الكلاس بمجرد ان يقوم المستخدم بالتسجيل في التطبيق )
المجلد Exceptions
يحتوي على الكلاسات الخاصة بمعالجة الاخطاء الخاصة بتطبيقك ، وهي ايضا مكان ممتاز بتضمين اي معالج يتم تشغيل بواسطة التطبيق ، اذا كنت تريد ان تقوم بتعديل آلية معالجة الاخطاء بين القيام بحفظها في ملف logاو عمل render لها فيمكنك التعديل على الكلاس Handler
الموجود في هذا المجلد.
المجلد Http
يحتوي على controllers, middleware, و form requests.
هو المكان الذي يتم فيه ادارة كافة المنطق الخاص بالتطبيق ، وكذلك معالجة جميع الrequests تتم في هذا المجلد
هذا المجلد غير موجود بصورة افتراضية ، ولكن ستيم انشاءه بمجرد تنفيذ الامر make:job ، المجلد Jobs يحتوي علىqueueable jobs
لتطبيقك .
الJobs (المهام) يمكن ان يتم وضعها في قائمة الانتظار لحين تنفيذها او يمكن ان تنفذ بصورة متزامنة مع دورة حياة الrequest الحالي , المهام التي تنفذ بصورة متزامنة اثناء دورة حياة الطلب الحالي تسمى احيانا "commands" ويمكن الاطلاع عليها command pattern.
هذا المجلد غير موجود بصورة افتراضية ، ولكن ستيم انشاءه بمجرد تنفيذ الامر event:generate او make:listener ، المجلد Listeners يحتوي على الكلاسات التي تقوم بمعالجة الاحداث events.
تقوم Listeners ( المتصنتات ) باخذ نسخة من event وتقوم تنفيذ الامر الذي تم انشاءه لها ، على سبيل المثال عند استدعاء ال event الخاص بتسجيل المستخدم سنقوم بوضع متنصت على هذا ال event ليعمل بصورة فورية على ارسال بريد الكتروني للمستخدم
هذا المجلد غير موجود بصورة افتراضية ، ولكن ستيم انشاءه بمجرد تنفيذ الامر make:mail ، المجلد Mail يحتوي على الكلاسات الخاصة بك التي تمثل الايميلات التي ترسل بواسطة التطبيق ، تتيح لك هذه الكلاسات ان تقوم بكتابة كافة التفاصيل المتعلقة بالايميلات وبناء الايميل ككلاس منفصل ، وسهل ويتم ارساله باستخدام الدالة Mail::send
هذا المجلد غير موجود بصورة افتراضية ، ولكن ستيم انشاءه بمجرد تنفيذ الامر make:notification ، المجلد Notifications يحتوي على الكلاسات الخاصة بالاشعارات التي ترسل من تطبيقك ، يمكن استخدام الاشعارات لارسال عدة انواع مثل ايميل ، Slack ، SMS او تخزينها في قاعدة البيانات
هذا المجلد غير موجود بصورة افتراضية ، ولكن ستيم انشاءه بمجرد تنفيذ الامر make:policy ، المجلد Policies يحتوي على الكلاسات الخاصة بالتفويض داخل تطبيقك ، التفويض يستخدم للتاكد من ان المستخدم لديه امكانية لتنفيذ الفعل ، لمذيد من التفاصيل يمكن مراجعة authorization documentation.
المجد Providers
يحتوي علي service providers الموجودة في تطبيقك
Service providers تقوم باعداد التطبيق وذلك عن طريق binding services في داخل service container(حاوي الخدمات) , بالاضافة الى تسجيل ال events , او القيام باي مهام اخرى لاعداد تطبيقك لاستقبال الطلب القادم
عند انشاء مشروع لارفل جديد هذا المجلد سيحتوي على عدد من المزودات، يمكنك القاء نظرة عليها واضافة المزودات الخاصة بك .
هذا المجلد غير موجود بصورة افتراضية ، ولكن ستيم انشاءه بمجرد تنفيذ الامر make:rule ، المجلد Rules يحتوي على الكلاسات الخاصة بالتحقق من المدخلات وقم النماذج يمكنك الاطلاع على مزيد من التفاصيل validation documentation.