ساختار یک پروژه لاراول
ساختار پیشفرض یک پروژه لاراول به منظور ارائه یک نقطه شروع عالی برای ساخت برنامه های بزرگ و کوچک در نظر گرفته شده است. با این حال می توانید ساختار برنامه خود را هر طور که خواستید تغییر دهید. لاراول تقریبا هیچ محدودیتی برای محل قرار گیری کلاس ها ندارد (البته تا زمانی که Composer بتواند آن کلاس ها را به صورت autoload بارگذاری کند). در ادامه به بررسی دایرکتوری های موجود در یک پروژه لاراول می پردازیم.
دایرکتوری App
این دایرکتوری شامل کدهای اصلی مربوط به برنامه است. تقریبا همه کلاس های مورد نیاز برنامه در این دایرکتوری قرار می گیرند. به صورت پیشفرض این دایرکتوری تحت فضای نام App قرار داد و توسط Composer و با استفاده از استاندارد PSR-4 autoloading بارگذاری می شود.
خود این دایرکتوری شامل چندین دایرکتوری دیگر مانند Console ،Http و Providers است. دایرکتوری Console و Http به عنوان یک API به داخل هسته برنامه خود در نظر بگیرید. پروتکل HTTP و CLI هر دو مکانیزمی برای تعامل با برنامه هستند. دایرکتوری Console شامل تمام دستورات Artisan و دایرکتوری Http شامل Controller ها، Middleware ها و Request ها است.
در هنگام توسعه برنامه ممکن است دایرکتوری های متنوع دیگری به دایرکتوری app اضافه شوند. برای مثال دایرکتوری app/Jobs زمانی که دستور make:job توسط Artisan اجرا شود، ایجاد می گردد.
بسیاری از کلاس هایی که در داخل دایرکتوری app ایجاد می شوند را می توانید با استفاده از دستورات Artisan ایجاد کنید. برای مشاهده دستورات موجود، دستور php artisan list make را در خط فرمان اجرا کنید.
دایرکتوری Broadcasting
این دایرکتوری شامل تمام کانال های broadcast برای کلاس های برنامه است. این کلاس ها توسط دستور make:channel ایجاد می شوند. دایرکتوری broadcasting به صورت پیشفرض وجود ندارد و بعد از اینکه اولین کانال خود را با دستور گفته شده ایجاد کنید، این دایرکتوری نیز ایجاد می شود.
دایرکتوری Console
این دایرکتوری شامل تمام دستورات سفارشی برای Artisan است. برای ایجاد یک دستور سفارشی می توانید از make:command استفاده کنید. این دایرکتوری شامل فایل kernel.php است که برای ثبت کردن دستورات سفارشی و یا ثبت یک دستور برای اجرا شدن در یک زمان خاص استفاده می شود.
دایرکتوری Event
این دایرکتوری به صورت پیشفرض وجود ندارد اما زمانی که دستور event:generate یا make:event اجرا شود، این دایرکتوری ایجاد می شود. با استفاده از event می توانیم بخش های مختلف برنامه را از رخ دادن یک رویداد خاص با خبر کنیم.
دایرکتوری Exceptions
این دایرکتوری شامل هندلر مربوط به exception های برنامه است و همچنین محل مناسبی برای قرار دادن exception های سفارشی که می خواهید در برنامه از آن ها استفاده کنید، است. اگر می خواهید چگونگی لاگ شدن یا رندر شدن exception های مربوط به برنامه خود را تغییر دهید، باید کلاس Handler را تغییر دهید.
دایرکتوری Http
این دایرکتوری شامل Controller ها، Middleware ها و Request ها است. تقریبا تمام منطق مربوط به هندل کردن درخواست های ورودی به برنامه شما در این دایرکتوری قرار می گیرد.
دایرکتوری Jobs
این دایرکتوری به صورت پیشفرض وجود ندارد و با اجرا شدن دستور make:job ایجاد می شود. این دایرکتوری شامل کارهای قابل صف بندی (Queueable Job) است. Job ها ممکن است توسط برنامه در صف انجام قرار گیرند و در فرصت مناسب انجام شوند یا به صورت همزمان با درخواست جاری اجرا شوند.
دایرکتوری Listeners
این دایرکتوری به صورت پیشفرض وجود ندارد و با اجرا شدن دستور event:generate یا make:listener ایجاد می شود. دایرکتوری Listeners شامل کلاس هایی است که event های برنامه را هندل می کنند. این کلاس ها برای هندل کردن رویدادهای خاص ایجاد می شوند و زمانی که آن رویداد رخ دهد، عملیات مشخص شده را انجام می دهند. برای مثال ممکن است شما یک رویداد به نام UserRegistered برای زمانی که کاربر ثبت نام کرد داشته باشید و همچنین یک Listener به نام SendWelcomeEmail برای هندل کردن آن رویداد داشته باشید. به این ترتیب زمانی که کاربر ثبت نام کرد، یک ایمیل خوش آمد گویی برای آن ارسال می شود.
دایرکتوری Mail
این دایرکتوری به صورت پیشفرض وجود ندارد و بعد از اجرا شدن دستور make:mail ایجاد می شود. دایرکتوری Mail ایمیل هایی که برنامه شما ارسال می کند را نگه می دارد.
دایرکتوری Models
دایرکتوری Models شامل تمام مدل های Eloquent مربوط به برنامه است. Eloquent در فریم ورک لاراول به منظور کار با دیتابیس استفاده می شود. در حقیقت شما جداول دیتابیس خود را به صورت مدل در این دایرکتوری ایجاد می کنید. هر جدول در دیتابیس یک مدل مرتبط در این دایرکتوری دارد که برای تعامل با آن جدول استفاده می شود.
دایرکتوری Notifications
این دایرکتوری به صورت پیشفرض وجود ندارد و با اجرا شدن دستور make:notification ایجاد می شود. همانطور که از اسم آن نیز مشخص است شامل تمام اعلان هایی است که توسط برنامه ارسال می شود.
دایرکتوری Policies
این دایرکتوری به صورت پیشفرض وجود ندارد و با اجرا شدن دستور make:policy ایجاد می شود. دایرکتوری Policies شامل کلاس های مربوط به authorization برنامه است. به عبارت سادهتر با استفاده از این کلاس ها مشخص می کنیم که آیا کاربر مجاز به انجام عمل مشخص شده است یا خیر.
دایرکتوری Providers
این دایرکتوری شامل تمام Service Provider های برنامه است. Service Provider ها برنامه را به وسیله بایند کردن سرویس ها در Service Container، ثبت کردن رویداد ها و یا انجام کارهای دیگر برای هندل کردن درخواست های ورودی آماده می کند. در هنگام ایجاد یک پروژه لاراول این دایرکتوری به صورت پیشفرض چندین provider دارد. شما می توانید provider های مورد نظر خود را نیز به آن اضافه کنید.
دایرکتوری Rules
این دایرکتوری به صورت پیشفرض وجود ندارد و با اجرای دستور make:rule ایجاد می شود. دایرکتوری Rules شامل قوانین اعتبارسنجی سفارشی برای برنامه است. با استفاده از Rule ها می توانیم منطق پیچیده اعتبارسنجی را در داخل یک کلاس ساده محصور کنیم.
دایرکتوری Bootstrap
این دایرکتوری شامل فایل app.php است که فریم ورک را به اصطلاح bootstrap می کند. همچنین فایل های مربوط به کش تولید شده توسط فریم ورک برای افزایش سرعت برنامه نیز در این دایرکتوری و داخل دایرکتوری cache قرار می گیرند. معمولا نیازی به ایجاد تغییر در این دایرکتوری ندارید.
دایرکتوری Config
دایرکتوری config همانطور که از اسم آن نیز مشخص است، شامل همه تنظیمات و پیکربندی های مربوط به برنامه است. پیشنهاد می کنیم که محتوای فایل های موجود در این دایرکتوری را مشاهده کنید.
دایرکتوری Database
این دایرکتوری شامل مایگریشن های دیتابیس، سیدرها و فاکتوری های مربوط به مدل ها است. همچنین می توانید در صورت نیاز فایل مربوط به دیتابیس SQLite را در این دایرکتوری نگه داری کنید.
دایرکتوری Public
این دایرکتوری شامل فایل index.php است که نقطه ورودی برای همه درخواست هایی است که به برنامه شما ارسال می شود. همچنین فایل های assets (مانند جاوا اسکریپت، تصاویر CSS و غیره) نیز در این دایرکتوری قرار می گیرند.
دایرکتوری Resources
دایرکتوری Resources شامل view ها، asset ها و فایل های مربوط به زبان های پشتیبانی شده توسط برنامه است. به عبارت دیگر می توان گفت که این دایرکتوری شامل مواردی است که کاربر می تواند مشاهده کند.
دایرکتوری Routes
تمام route های مربوط به برنامه در داخل دایرکتوری Routes تعریف می شوند. به صورت پیشفرض فایل های web.php، api.php، console.php و channels.php در این دایرکتوری قرار دارند.
دایرکتوری Storage
دایرکتوری storage شامل لاگها، blade های کامپایل شده، نشست های ذخیره شده در فایل، کش ها و سایر فایل های تولید شده توسط فریم ورک است. خود این دایرکتوری شامل زیر دایرکتوری های app، framework و logs است. دایرکتوری app برای نگه داری فایل های تولید شده توسط برنامه استفاده می شود. دایرکتوری framework برای نگه داری فایل ها و کش های تولید شده توسط فریم ورک استفاده می شود. دایرکتوری logs هم همانطور که از اسم آن نیز مشخص است به منظور نگه داری لاگهای برنامه استفاده می شود.
برای نگه داری فایل تولید شده توسط کاربر مانند عکس پروفایل که باید به صورت public در دسترس باشد می توانید از دایرکتوری storage/app/public استفاده کنید. برای اینکار باید یک لینک symbolic در داخل دایرکتوری public/storage که به storage/app/public اشاره می کند، ایجاد کنید. برای ایجاد لینک می توانید از دستور php artisan storage:link استفاده کنید.
دایرکتوری Tests
همانطور از اسم آن نیز مشخص است این دایرکتوری شامل تست های برنامه است. هر کلاس تست باید با کلمه Test خاتمه یابد. برای مثال UserPaymentServiceTest. برای اجرا کردن تست های برنامه می توانید از دستور php artisan test یا phpunit استفاده کنید.
دایرکتوری Vender
این دایرکتوری شامل وابستگی های مربوط به Composer است.