پیش از اینکه کد نویسی را شروع کنیم، نگاهی به ساختار پوشه بندی لاراول می اندازیم:
اگر با ساختار فریم ورک آشنا باشیم و بدانیم که هر بخش از فریم ورک کجا قرار دارد، نوشتن کد در آن بسیار راحت تر خواهد بود. با پوشه public شروع می کنیم.
پوشه public
پوشه public چهره عمومی برنامه ما است. یعنی وقتی که برنامه مان را روی سرور production مستقر می کنیم یا آن را در محیط local اجرا می کنیم، همه چیز به پوشه public اشاره می کند. به عبارت دیگر تنها فایل های درون پوشه public به صورت عمومی قابل دسترسی اند و نمی توان به سایر فایل ها دسترسی داشت.
درون پوشه public فایل index.php را داریم. در این فایل autoloader مربوط به composer آورده شده است که همه ی وابستگی های مورد نیاز لاراول را قابل استفاده می کند. سپس فایل app.php که داخل پوشه bootstrap قرار دارد، آورده شده است تا توسط آن برنامه مان ایجاد شود.
<?php
use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
/*
|--------------------------------------------------------------------------
| Check If The Application Is Under Maintenance
|--------------------------------------------------------------------------
|
| If the application is in maintenance / demo mode via the "down" command
| we will load this file so that any pre-rendered content can be shown
| instead of starting the framework, which could cause an exception.
|
*/
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
require $maintenance;
}
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| this application. We just need to utilize it! We'll simply require it
| into the script here so we don't need to manually load our classes.
|
*/
require __DIR__.'/../vendor/autoload.php';
/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request using
| the application's HTTP kernel. Then, we will send the response back
| to this client's browser, allowing them to enjoy our application.
|
*/
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Kernel::class);
$response = $kernel->handle(
$request = Request::capture()
)->send();
$kernel->terminate($request, $response);
به طور معمول هنگام توسعه برنامه ها با لاراول به سراغ فایل app.php نمی رویم مگر اینکه نیازمندی خاصی وجود داشته باشد.
حال به پوشه storage می رویم.
پوشه storage
این پوشه هم مانند فایل app.php بخشی از فریم ورک نیست که هنگام توسعه برنامه ها مدام به آن سر بزنید. در پوشه logs تمام خطا های برنامه ذخیره می شود. از آنجایی که ما هنوز به خطایی نخوردیم، این پوشه خالی است. در پوشه framework هم چندین پوشه دیگر وجود دارد. در این پوشه ها تمام چیز هایی که فریم ورک ذخیره می کند، قرار خواهد گرفت. برای نمونه اگر کاربری در برنامه ما login کند، session کاربر در پوشه sessions ذخیره می شود. پوشه app هم محل ذخیره سازی فایل های عمومی برنامه است. هر فایلی که در برنامه آپلود شود، در این پوشه ذخیره خواهد شد.
پوشه routes
محل ورود برنامه ما در پوشه routes قرار دارد. وقتی که میخواهیم یک صفحه جدید ایجاد کنیم باید یک route یا مسیر تعریف کنیم. هر route ای که تعریف می کنیم می تواند یک closure برای انجام دادن کارش داشته باشد. برای نمونه در فایل web.php یک route تعریف شده است که view ای با نام welcome را بر میگرداند.
Route::get('/', function () {
return view('welcome');
});
این view دقیقا همان صفحهی پیش فرض فریم ورک است که در قسمت قبل دیدیم.
پس همه صفحه ها یا route های برنامه مان را در فایل هایی که داخل پوشه routes قرار دارند تعریف می کنیم و به آن ها یک closure یا controller که در قسمت های بعد با آن آشنا خواهیم شد اختصاص میدهیم.
به غیر از web.php سه فایل دیگر در پوشه routes قرار دارد که در این دوره از آنها استفاده نمی شود.
فایل api.php برای توسعه api ها کاربرد دارد. route های تعریف شده در این فایل middleware های متفاوتی دارند.
فایل channels هم در این پوشه قرار دارد که برای انتقال داده ها به صورت real time استفاده می شود. از آنجایی که این یک قابلیت پیشرفته در لاراول محسوب می شود، ما در این دوره به آن نمی پردازیم.
فایل دیگری که در پوشه routes قرار دارد console است. در این فایل می توانیم دستور های artisan خود را ثبت کنیم. در قسمت قبل کمی درمورد artisan صحبت کردیم و در ادامه بیشتر به آن می پردازیم.
همانطور که گفته شد، در فایل web.php یک route تعریف شده که در آن view ای با نام welcome بر می گردد. بیاید تلاش کنیم این view را پیدا کنیم.
به پوشه resources بروید.
پوشه resources
در این پوشه تمام فایل های مربوط به front-end برنامه شما قرار می گیرد. چیز هایی مثل JavaScript ،CSS و view ها همگی در این پوشه قرار دارند. داخل پوشه views فایل welcome.blade.php قرار دارد که همان صفحه پیش فرض فریم ورک است.
پوشه config
اگر به پوشه config برویم همه فایل های مربوط به پیکربندی برنامه را مشاهده می کنیم.
لاراول موارد زیادی را به صورت پیش فرض پیکربندی کرده است. در فایل app.php پیکربندی های مربوط به خود برنامه مانند نام آن قرار دارد. در فریم ورک لاراول و برنامه هایی که با آن توسعه می دهیم، پیکربندی ها کاربرد زیادی دارند. در فایل app.php تابعی به نام env استفاده شده است. این تابع مقدار متغیر های محیطی ما که در فایل .env قرار دارند را بر می گرداند.
فایل .env برنامه بسیار مهم است. این همان فایلی است که در محیط های مختلف، برای اجرای صحیح برنامه پیکربندی می کنیم. برای نمونه در محیط local مقدار APP_DEBUG را true قرار می دهیم. این کار باعث می شود هنگامی که در برنامه خطایی رخ می دهد بتوانیم گزارش کاملی از فایل های اجرا شده در برنامه داشته باشیم و مشکل را راحت تر برطرف کنیم. زمانی که بخواهیم برنامه مان را در محیط production مستقر کنیم باید مقدار APP_DEBUG را false قرار دهیم تا اطلاعات حساس برنامه مان لو نرود. اگر به فایل app.php در پوشه config بروید تابع env با دو ورودی صدا زده شده است. ورودی اول نام متغیر محیطی ای است که مقدار آن را می خواهیم. ورودی دوم هم مقدار پیش فرض آن متغیر است.
'name' => env('APP_NAME', 'Laravel'),
پوشه database
در مسیر اصلی فریم ورک پوشه database را داریم که شامل سه پوشه migrations، factories و seeders می شود. در این دوره کار با migration ها را یاد می گیریم.
به کمک migration ها ما کلاسی می نویسیم که یک جدول در دیتابیس ما ایجاد کند. migration ها مانند سیستم کنترل نسخه برای پایگاه داده برنامه مان عمل می کنند. کلاس های migration، یک متد up دارند که در آن تغییری مانند ایجاد جدول یا اضافه کردن ستون و... در پایگاه داده برنامه اعمال می شود. این کلاس ها یک متد down هم دارند که برای برگرداندن تغییراتی که متد up ایجاد کرده است استفاده می شود.
پوشه tests
در پوشه tests تمام تست های خودکاری که برای برنامه مان می نویسیم قرار خواهد گرفت. لاراول تابع های کمکی زیادی برای تست کردن برنامه ها به صورت خودکار به ما ارائه می دهد.
تا اینجا همه پوشه های اصلی فریم ورک را بررسی کردیم. از میان این پوشه ها، بیشتر با database، resources و routes کار خواهیم کرد.
پوشه app
اکنون سری به پوشه app بزنید. در این پوشه محتویات اصلی برنامه ما قرار خواهد گرفت.
اگر پوشه Http را باز کنیم، پوشه Controllers را مشاهده میکنیم. کنترلر ها را میتوانیم به شکل دستی یا با استفاده از کنسول artisan ایجاد کنیم. کنترلر ها کلاس هایی اند که به route های برنامه اختصاص می دهیم. در ادامه دوره تعدادی کنترلر ایجاد خواهیم کرد.
علاوه بر پوشه Controllers، پوشه Middleware را داریم. در حال حاضر تعدادی middleware در برنامه مان وجود دارد. middleware ها لایه هایی هستند که درخواست کاربران برنامه از آن ها رد می شود و به هسته اصلی برنامه می رسد. در ادامه دوره بیشتر به middleware ها میپردازیم.
درون پوشه app پوشه Models هم قرار دارد.
تصور کنید که می خواهیم یک پست جدید ایجاد کنیم و لیستی از پست های یک کاربر داشته باشیم. اگر از خط فرمان استفاده کنیم، model مربوط به پست درون پوشه ی Models ایجاد خواهد شد. هنگام استفاده از کنسول artisan، میتوانیم در کنار ایجاد مدل پست، یک migration هم برای جدول مربوط به آن ایجاد کنیم.
پوشه providers لیستی از service provider های برنامه به ما میدهد.
service provider ها به ما اجازه میدهند تا چیز هایی را در کانتینر لاراول ثبت کنیم یا سرویس های مورد نظرمان را در فریم ورک راه اندازی کنیم. بیشتر وقت ها هنگام استفاده از پکیج های مختلف داخل فریم ورک لاراول، نیاز است تا با service provider ها کار کنیم. از آن جایی که در این دوره فقط به مفاهیم پایه ای می پردازیم، با service provider ها خیلی کار نخواهیم کرد.
همچنین در پوشه app، پوشه Console را داریم که در آن فایل همه دستور هایی که برای برنامه مان توسعه می دهیم قرار میگیرد.
علاوه بر مواردی که بالاتر گفته شد، پوشه Exceptions هم وجود دارد. در این پوشه فایلی به نام Handler.php قرار دارد که در آن می توانیم شیوه رسیدگی به خطا های مختلف در برنامه را تعریف کنیم. اگر بخواهیم شیوه کارکرد خطا های پیش فرض فریم ورک را تغییر دهیم باید با این فایل کار کنیم.
تا کنون بیشتر پوشه های فریم ورک را بررسی کردیم. حال سری به فایل هایی که در مسیر اصلی قرار دارند می زنیم. فایل composer.json را باز کنید. composer برنامه ای است که با کمک آن می توانیم وابستگی های برنامه هایمان را مدیریت کنیم. در فایل composer.json تمام وابستگی های برنامه به همراه نسخه مورد نیازشان آورده می شود. برای مثال در این فایل نوشته شده که برای اجرای برنامه به نسخه 8 زبان PHP نیاز داریم.
"php": "^8.0.2",
فریم ورک لاراول هم جز این وابستگی ها است. علاوه بر فریم ورک لاراول، وابستگی های دیگری هم وجود دارد.
دو فایل مهم دیگر در مسیر اصلی فریم ورک package.json و vite.config.js است که برای کامپایل javascript و css برنامه و مدیریت وابستگی های frontend استفاده می شود.
فایل artisan.php هم در مسیر اصلی قرار دارد که به ما اجازه می دهد از کنسول artisan استفاده کنیم. به طور معمول نیاز نیست در این فایل تغییری ایجاد کنیم.
فریم ورک لاراول با معماری MVC توسعه داده شده است. به همین دلیل میتوانیم بخش های مختلف این معماری که شامل Model و View و Controller است را در میان پوشههای لاراول ببینیم.
امیدوارم در این قسمت ایده خوبی از اینکه چه کدی را کجا می نویسیم بدست آورده باشید. با شروع کد نویسی در فریم ورک لاراول، رفته رفته با پوشه ها و بخشهای مختلف آن بیشتر آشنا خواهید شد.