لاراول یکی از چندین فریم نوشته شده به زبان پی اچ پی است که به صورت متن باز توسعه داده می شود. در کنار لاراول فریم ورک های دیگری مانند Zend, Symphony, Codeigniter و Cack PHP وجود دارند که همگی در بسیاری از ویژگی ها همانند لاراول هستند. اصلی ترین هدفی که تمامی این فریم ورک ها دنبال می کنند، آوردن معماری MVC (یا Model View Controll) به برنامه های نوشته شده به زبان پی اچ پی است.

برنامه هایی که امروزه با آنها کار می کنیم از سه جز تشکیل شده اند.جز اول بخشی است که در تعامل با کاربر است، به طور مثال در دستگاه های خودپرداز، کاربر از طریق صفحه نمایش وکلیدهای دستگاه خودپرداز، با سیستم بانکی در تعامل است. اما خود تراکنش ها و درخواست شما در جای دیگری پردازش می شوند که در واقع بخش منطق (Logic) برنامه است. در نهایت داده ها نیز در مکان و سرورهای دیگر نگهداری می شوند.

معماری MVC نیز شبیه همین سه لایه است به این معنی که بخش نما (View)، بخش کنترل گر (Controller یا بخش منطق) و بخش داده ها (Model) از یکدیگر جدا شده اند. هدف جدا سازی این سه بخش توسعه ساده تر برنامه ها است به طوری که تغییر بر روی ساختار وکدهای یکی از دیگری جدا شده که همین مورد باعث سادگی وکاهش پیچیدگی های توسعه برنامه ها می شود.

در معماری MVC هر کنترل گر واسطه ای میان بخش نما (View) و بخش مدل (Model) است به طوری که داده ها درون منابع داده ای مانند پایگاه داده رابطه ای یا پایگاه داده غیر رابطه ای NoSQL ذخیره شده اند و بخش مدل است که با این منابع کار می کند و دیگر دو بخش یعنی نما وکنترلر گر از چگونگی دسترسی، ذخیره سازی، تغییر و حذف کردن داده ها مطلع نیستند.

کاربر درخواست خود را از طریق بخش نما به کنترل گر ارسال می کند. کنترل گر حاوی کدهایی است که منطق برنامه را تعریف می کنند. کنترل گر می داند که چه عکس العملی روی درخواست ورودی انجام دهد. آیا لازم است که با بخش مدل ارتباط برقرار کند؟ آیا درخواست کاربر یک درخواست مجاز است؟ آیا کاربر مجوز درخواست را داشته است؟

بنابراین به زبان ساده در مدل MVC کاربر ابتدا درخواست را از طریق نما (مانند فرم های اچ تی ام ال) به یک کنتر گر ارسال می کند و سپس کنترل گر تصمیم می گیرد که چگونه پاسخ دهد. شاید لازم باشد با بخش مدل ارتباط برقرار کند تا بخش مدل نیز با پایگاه داده ارتباط بر قرار کند و سپس داده هایی را بدست آورده و تحویل کنترل گر دهد و سپس کنترل گر این داده ها را به بخش نما تحویل دهد تا به کاربر نمایش داده شوند. همچنین ممکن است کاربر داده هایی را تحویل کنترل گر دهد و پس از اینکه کنترل گر داده ها را اعتبار سنجی کرد، آنها را تحویل بخش مدل دهد تا درون پایگاه داده ذخیره شوند.

کنترل گر ها در لاراول

در لاراول ۵.۷ یک کنترل گر کلاسی است که از کلاس پایه و والد به نام Controller مشتق شده است. تمامی منطق های درون برنامه در غالب این کلاس ها و متدهای درون آنها تعریف می شوند. مطابق با مدل MVC هر کنترل گر یکی از منطق های برنامه را پیاده سازی می کند.

به طور مثال کنترل گری لازم داریم تا از طریق فرم تماس با ما، یک سری اطلاعات را مانند نام، آدرس ایمیل و متن پیغام را دریافت کند و پس از اعتبار سنجی مقادیر ارسال شده آنها را درون یک پایگاه داده ذخیره کند. در این مثال لازم است حتما هر سه فیلد اطلاعات پر شده باشند و اینکه آیا آدرس ایمیل فرمت درست را دارد. تمامی این موارد درون کنترل گر مربوط به ارسال پیغام انجام می شوند. همچنین کنترل گر مجزایی را برای ارسال پیغام و فرم تماس با ما ایجاد کرده ایم که باعث می شود توسعه و بهبود آن مجزا از دیگر بخش ها و منطق های برنامه صورت گیرد.

در پی اچ پی یک کلاس با واژه کلیدی class شروع می شود و سپس به دنبال آن یک نام برای کلاس قرار می گیرد. اگر قرار باشد کلاس از کلاس دیگری به ارث برده شود، باید به صورت فرم زیر از واژه کلیدی extend استفاده شود. کد پی اچ پی زیر ساختار تعریف یک کلاس کنترل گر را نشان می دهد.

همانطور که می بینید کلاس MessageController از کلاس پایه والد Controller مشتق شده است. همچنین در فریم ورک لاراول کلاس پایه Controller در فضای نام namespace App\Http\Controllers قرار دارد. شکل زیر بخشی از ساختار دایرکتوری های پروژه لاراول را نشان می دهد و می بینید که تمامی کنترل گر ها باید درون دایرکتوری app/controllers قرار بگیرند.

در خط ۹ از قطعه کد بالا یک تابع یا متد (Method) درون کلاس MessageController به نام submit تعریف شده است. تعریف متدها و توابع درون پی اچ پی با واژه کلیدی function شروع می شوند و سپس به دنبال آن نام تابع می آید.

هر تابع یا متد ممکن است یک یا چند مقدار ورودی به نام پارامترهای ورودی را دریافت کنند و سپس ممکن است یک مقدار را برگشت دهند و یا یک پیغام را چاپ کنند. در کد بالا تابع یا متد submit یک پارامتر را دریافت می کند ولی در خط ۱۷ و توسط دستور return یک مقدار رشته ای را برگشت می دهند.

پارامتری request$ یک متغیری است از نوع کلاس Request که این کلاس درون فریم ورک لاراول تعریف شده اند. در پی اچی پی تمامی متغیرها با علامت $ شروع می شوند. یک متغیر می تواند نوع عددی، رشته، آرایه را در خود نگه دارد و یا اینکه می تواند نمونه ای از یک کلاس باشد. به طور مثال request$ یک متغیر یا اصطلاحا یک شی از کلاس Request است

تفاوت تابع و متد در این است که متدها درون یک کلاس تعریف می شوند. هر متد درون کلاس های پی اچ پی می تواند به صورت public, private یا protected باشد. به طور مثال متد submit به صورت public تعریف شده است، پس به صورت عمومی است و می توان خارج از کلاس به آن دسترسی داشته باشیم.

قواعد کنترل گر در لاراول

۱ – هر کنترل گر کلاسی است که از کلاس پایه Controller مشتق (extend) شده است.

۲ – نام هر کنترل گر با عبارت Controller تمام می شود. به طور مثال MessageController یک نام معتبر برای کنترل گر است.

۳ – تمامی کنترل گرها درون دایرکتوری app/Http/Controllers قرار دارند.

۴ – نشان خواهیم داد که برای ایجاد کنترل گرها از دستور php artisan make:controller استفاده می کنیم.

مدل ها در لاراول

در لااول و بر اساس مدل MVC، بخش مدل چگونگی ارتباط و تعامل با پایگاه داده ها را تعریف می کند. هر مدل همانند کنترل گر یک کلاس است که درون آن ساختار جدول پایگاه داده تعریف می شود. در واقع هر کلاس معادل یک جدول است. در بخش های بعدی به صورت کامل مفهوم مدل، مفهوم migration در لاراول و مفهوم ORM به صورت کامل توضیح داده شده اند.

نما یا View در لاراول

به زبان ساده نماها در لاراول متشکل از فایل های با پسوند blade.php هستند که شامل کدهای اچ تی ام ال هستند. به طور مثال فایل نما با پسوند blade.php می تواند شامل تگ های یک جدول، تگ های نمایش آلبوم شخصی، تگ های یک فرم ورود اطلاعات و غیره باشد.

در واقع blade نام یک موتور قالب (Template Engine) است که از بهم ریختگی ناشی از ترکیب کدهای پی اچ اپی و اچ تی ام ال درون یک فایل جلوگیری می کند. در واقع کدهای پی اچ پی که منطق برنامه هستند را درون کلاس های کنترل گر و کدهای اچ تی ام ال که به کاربر نمایش داده می شوند را درون فایل های با پسوند blade.php ذخیره می کنیم.

اما چگونه داده هایی که کنترل گر از مدل دریافت کرده را در فایل های نما با پسوند blade.php نمایش دهیم؟ آیا نباید کدهای پی اچ پی از اچ تی ام ال جدا شوند؟ در مطالب بعدی بیشتر در مورد موتور قالب blade و چگونگی ایجاد قالب ها و لایه ها در لاراول صحبت کرده ایم.

قواعد نماها در لاراول

۱ – تمامی نما ها باید دارای پسوند blade.php باشند.

۲ – تمامی نما ها در زیر دایرکتوری resources/views قرار دارند.

۳ – فایل های blade.php حاوی کدهای اچ تی ام ال هستند.