سلام دوستان. درک اینکه هر پوشه توی فریمورک لاراول چی هست و چه کاری انجام میده، خیلی کمک‌کننده می‌تونه باشه. توی این مقاله با هم ساختار پوشه‌ها در این فریمورک رو بررسی می‌کنیم.

نکته: با اینکه سعی کردم یک توضیح کوتاه درباره کارایی هر مسیر بدم، اما اگه توی درک یک مورد دچار مشکل شدین، ایرادی نداره؛ چون این مقاله برای این نوشته شده که فقط با ساختار پوشه‌بندی فریمورک لاراول آشنا بشیم، نه کارایی اونها 🙂

مسیر ریشه (root) پروژه شامل مسیرهای زیر میشه:

  • app
  • bootstrap
  • config
  • database
  • public
  • resources
  • routes
  • storage
  • tests
  • vendor

 

مسیرهای روت (Root)

App (/app)

این مسیر شامل کدهای هسته برنامه‌ای هست که قراره بنویسیم. اکثر کلاس‌ها و فایل‌های برنامه ما توی این مسیر قرار میگیره. این مسیر خودش شامل چند مسیر دیگه میشه که توی ادامه اونها رو بررسی میکنیم.

Bootstrap (/bootstrap)

این مسیر شامل یک فایل هست به اسم app.php. وظیفه این فایل اینه که فریمورک رو راه‌اندازی کنه. این مسیر همچنین یک پوشه‌ای داره به اسم cache که شامل فایل‌هایی هست که فریمورک برای افزایش سرعت تولید میکنه. مثل فایل‌های کش تولید شده برای Routeها و سرویس‌ها.

Config (/config)

این مسیر همونطور که از اسمش مشخصه، شامل همه فایل‌های پیکربندی (configuration) برنامه هست. همه‌ی تنظیمات مربوط به برنامه‌ی ما توی این پوشه قرار میگیره. مثلا تنظیمات مربوط به دیتابیس، ایمیل و ...

Database (/database)

این مسیر شامل فایل‌های Seed, Migration و Model Factory پروژه هست.

Public (/public)

این مسیر یک فایل داره به اسم index.php که یک ورودی برای همه درخواست‌هایی هست که به برنامه میاد. همچنین autoloading برنامه هم بر عهده این فایل هست. این مسیر همونطور که از اسمش پیدا هست، مسیر عمومی برنامه هست. پس میتونه شامل تصاویر، فایل‌های CSS و Javascript باشه.

Resources (/resources)

این مسیر شامل فایل‌های view هست. همچنین شامل فایل‌های خام و کامپایل نشده LESS و SASS و جاوا اسکریپت هست. فایل‌های مربوط به زبان هم توی این مسیر هست (fa, en, fr , ...)

Routes (/routes)

ما توی این پوشه، تمام مسیرهایی که برای برنامه‌مون درنظر گرفتیم رو مشخص میکنیم. منظور از مسیر همون آدرس‌هایی هست که کاربر توی مرورگرش وارد میکنه. این مسیرها رو اینجا مشخص میکنیم.
بطور پیشفرض این پوشه شامل 4 تا فایل هست: channels.php - console.php - api.php - web.php

همه مسیرهایی که توی فایل web.php تعریف میکنیم، بطور پیشفرض شامل یک سری میدلویر هایی هستن. مثل Session، CSRF Protection، Cookie Encryption.
اگه پروژه شما Stateless یا RESTful API نیست، اکثر مسیرهایی که وجود داره توی همین فایل قرار میگیره.

از فایل api.php زمانی استفاده میکنیم که پروژه ما Stateless باشه. یعنی برای مثال برای اینکه کاربر رو احراز هویت کنیم باید توی هر درخواست، رشته مربوط به احراز هویت (Token) وجود داشته باشه. پس از سشن و کوکی توی این قسمت پروژه خبری نیست.

اگه بخوایم از طریق Console یک سری کارهایی رو توی برنامه انجام بدیم، از فایل console.php استفاده میکنیم. همین الان توی خط فرمان بنویسید:

php artisan inspire

و بعد فایل console.php رو باز کنید تا موضوع روشن‌تر بشه :)

اگه قرار باشه از WebSockets استفاده کنیم، فایل channels.php هم برای مشخص کردن مسیرهای مورد نظر ماست.

Storage (/storage)

این مسیر برای ذخیره و نگهداری فایل‌های فریمورک و برنامه هست. این مسیر سه تا پوشه داره. app، framework و logs.
پوشه app مکان خوبیه که فایل‌های برنامه‌مون رو ذخیره کنیم.
پوشه framework شامل فایل‌هایی میشه که خود فریمورک تولید میکنه. مثل فایل‌های کامپایل شده Blade، فایل‌های سشن، فایل‌های کش و یک سری فایل دیگه که توسط فریمورک تولید میشه.
پوشه logs که همونطور که از اسمش پیداست، برای ذخیره گزارش‌های برنامه‌ی ما استفاده میشه.

پوشه /storage/app/public مکان خوبیه که فایل‌های کاربر رو ذخیره کنیم. مثلا آواتار و فایل‌هایی که لازمه بصورت عمومی در دسترس باشن. البته برای دسترسی عمومی به این فایل‌ها باید symbolic link درست کنیم که به این مسیر اشاره کنه. با استفاده از دستور زیر توی خط فرمان میتونیم این symbolic link رو بسازیم:

php artisan storage:link

 

Tests (/tests)

این مسیر هم همونطور که از اسمش مشخصه شامل تست‌های برنامه ما هست.

Vendor (/vendor)

پکیج‌هایی که برای برنامه نیاز داریم، توسط composer توی این پوشه ذخیره و استفاده میشه.

 

 خب مسیر روت پروژه رو بررسی کردیم. همونطور که گفتم مسیر app مهمترین مسیری هست که توی برنامه باهاش سر و کار داریم. پس به بررسی تخصصی این مسیر میپردازیم 😉

 

مسیرهای App

این پوشه یکی از مهمترین پوشه‌های لاراول هست و شامل این مسیرها میشه:

 

Broadcasting (/app/Broadcasting)

این مسیر بطور پیشفرض وجود نداره. وقتی با دستور make:channel توی خط فرمان یک Broadcast Channel میسازیم، فایلی که تولید میشه توی این مسیر قرار میگیره.

 

Console (/app/Console)

دستورات Artisan دلخواه ما که توسط php artisan make:command تولید میشه، توی این مسیر قرار میگیره.

توی این مسیر یک فایل وجود داره به اسم kernel.php که ما توی اون دستورات دلخواه Artisan رو رجیستر میکنیم. همچنین scheduled tasks ها هم توی این فایل مدیریت میشن.

 

Events (/app/Events)

این مسیر بطور پیشفرض وجود نداره و زمانی ساخته میشه که دستور event:generate یا make:event رو توی خط فرمان اجرا کنیم. پس کلاس‌های Event ما توی این مسیر قرار میگیرن.

 

Exceptions (/app/Exceptions)

این مسیر یک فایلی داره به اسم Handler.php. این فایل مسئول مدیریت استثنا (Exception) هایی هست که توی برنامه رخ میده. اگه نیاز به یک کلاس استثنای جدید داریم، میتونیم توی همین مسیر قرار بدیم.

 

Http (/app/Http)

این مسیر شامل همه کنترلرها، Middleware ها و Form Request میشه. تقریبا همه فایل‌ها و کلاس‌هایی که لازم داریم برای مدیریت درخواست‌هایی که به سمت برنامه میاد، توی این مسیر قرار میگیره.

 

Jobs (/app/Jobs)

این مسیر با دستور آرتیزان make:job ساخته میشه و شامل Jobهای برنامه ما میشه. Jobها برنامه‌هایی هستن که میتونن توی یک صف قرار بگیرن و به ترتیب اجرا بشن. مثلا ارسال ایمیل گروهی به کاربرا، حذف کردن لاگ‌های قدیمی و ...

 

Listeners (/app/Listeners)

این مسیر هم بطور پیشفرض وجود نداره و زمانی ساخته میشه که ما دستور آرتیزان make:listener رو اجرا کنیم. وقتی یک رویداد (Event) توی برنامه رخ میده، میتونیم به اون رویداد چندتا کار ضمیمه کنیم. ما به این کارها میگیم Listener. مثلا وقتی کاربر ثبت‌نام کرد (رویداد)، میخوایم چند تا کار انجام بگیره؛ مثلا ایمیل فعالسازی بره برای کاربر، متن خوش‌آمد گویی بره، برای مدیر ایمیل بره و ... . به کارهایی که قراره بعد از یک رویداد صورت بگیره، میگیم Listener .Listenerها که کلاس هستن، توی این پوشه قرار میگیرن.

 

Mail (/app/Mail)

این مسیر اولین بار با دستور آرتیزان make:mail ساخته و شامل کلاس‌های ایمیل ما میشه. توی فریمورک لاراول، ما ایمیل‌های مختلفی که از طریق برنامه ارسال میکنیم رو توی فایل‌ها (کلاس‌ها)ی جداگونه قرار میدیم. که این فایل‌ها توی این مسیر قرار میگیرن.

 

Models (/app/Models)

توی این مسیر مدل‌های برنامه قرار می‌گیره. مدل‌های ما قبلاً توی مسیر /app قرار می‌گرفتن. اما توی بروزرسانی‌های جدید یک پوشه اختصاصی برای مدل‌ها در نظر گرفته شده.

 

Notifications (/app/Notifications)

این مسیر هم اولین بار با دستور آرتیزان make:notification ساخته میشه. ما گاهی اوقات توی برنامه نیاز داریم که یک سری اعلانات (Notification) به کاربر بدیم. مثلا با ایمیل، SMS و یا ذخیره پیام توی دیتابیس و نشون دادنش بعد از ورود به سایت. هر اعلانی توی یک کلاس جدا، توی این پوشه قرار میگیره.

 

Policies (/app/Policies)

Policyها برای این ساخته میشن که مشخص کنیم مثلا یک کاربر آیا میتونه یک پست رو ویرایش کنه یا میتونه به یک صفحه خاص دسترسی پیدا کنه یا نه. این مسیر بطور پیشفرض وجود نداره و اولین بار با دستور آرتیزان make:policy ساخته میشه.

 

Providers (/app/Providers)

همونطور که میدونیم اساس برنامه‌ها به این صورت هست که درخواست (Request) میگیرن و پاسخ (Response) میدن. قبل از اینکه یک درخواست توسط برنامه ما بررسی بشه، ما لازم داریم یک سری برنامه‌ها و سرویس‌ها رو اجرا کنیم. مثلا رجیستر کردن کلاس‌ها و سرویس‌هایی که توی برنامه لازم داریم، رجیستر کردن رویدادها و هر چیز دیگه‌ای که لازم داریم برای مدیریت این درخواستی که قراره بررسی بشه. این سرویس‌های مورد نیاز ما توی یک کلاسی قرار میگیرن که به این کلاس‌ها میگن Provider.

 

Rules (/app/Rules)

توی لاراول برای اعتبارسنجی یک درخواست از Validation استفاده میکنیم. خود فریمورک بطور پیشفرض یک سری قوانین (Rule) داره. اما ما میتونیم قوانین دلخواه‌مون رو داشته باشیم. که این قوانین توی این پوشه قرار میگیره. این مسیر از قبل وجود نداره و اولین بار با دستور آرتیزان make:rule ساخته میشه.

 

خب دوستان این مقاله هم به پایان رسید. خیلی خوشحالم که دوباره تونستم برای شما بنویسم. روزتون خوش 🌹😉

من برای این مقاله از استفاده کردم