مسیر یادگیری PHP و Laravel

آخرین پرسش‌های کاربران در Laravel (لاراول)

Laravel (لاراول)

به جرات می توان گفت که کمتر کسی است که در فضای توسعه وب فعال باشد اما نام لاراول را نشنیده باشد! اما اگر با لاراول آشنا نیستید، این مقاله تمام مفاهیم مورد نیاز شما برای آموزش لاراول را در اختیارتان قرار می دهد.

فریم ورک (Framework) چیست؟

لاراول چیست؟
 لاراول چیست؟

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

تصور کنید که بخواهید یک خودرو بسازید. از نظر تئوری شما می توانید تمام وسایل یک خودرو را خریداری کرده و سپس قسمت های مختلف مانند موتور ماشین را به صورت دستی بسازید و در نهایت این قطعات را سر هم کرده و یک خودرو را داشته باشید. آیا این کار ممکن است؟ اگر دانش تخصصی آن را داشته باشید، بله، ممکن است اما انجام آن سال ها طول خواهد کشید!

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

چرا از فریم ورک ها استفاده می کنیم؟

استفاده از فریم ورک ها محدود به توسعه اولیه نیست. با اینکه فریم ورک ها سرعت توسعه را برای ما بالا برده و این فرآیند را تسهیل می کنند اما مسئله، فراتر از توسعه اولیه نرم افزار است. پس از اینکه شما و تیم شما نرم افزار مورد نظرتان را ساختید (این نرم افزار می تواند یک وب سایت باشد یا یک نرم افزار اندروید یا هر نرم افزار دیگری) حالا باید آن را maintain کنید. maintain به معنی «نگهداری» و «مدیریت» نرم افزار است. مثلا اگر یک وب سایت را ساخته باشید باید به شکایات مشتریان پاسخ دهید، وب سایت را هر از چند گاهی به روز رسانی کنید تا از خطرات جدید در امان بمانید، سرورهایتان را افزایش دهید تا بتوانید میزبان کاربران بیشتری باشید و الی آخر. نرم افزارها مانند فرزندان توسعه دهندگان هستند و تولد آن ها تازه شروع کار است!

در صورتی که نرم افزار خود را بدون استفاده از فریم ورک ها نوشته باشید، بخش مدیریت و نگهداری سایت ممکن است برایتان تبدیل به یک جهنم شود. بنابراین فریم ورک ها در طول زندگی نرم افزار شما همراه شما خواهند بود و بسیار مهم است که فریم ورکی را انتخاب کنید که پخته باشد و بدانیم تا سال های سال به روز رسانی خواهد شد. برخی از مزایای فریم ورک ها به شرح زیر است:

  • پیروی از روش های طراحی استاندارد (best practices)
  • امنیت بیشتر. فریم ورک ها توسط تیم های مجرب ساخته شده و توسط هزاران نفر تست می شوند بنابراین امنیتشان همیشه بیشتر از چیزی است که شما شخصا نوشته باشید مگر اینکه توسعه دهنده ای بسیار حرفه ای باشید.
  • جلوگیری از تکرار کد و کدنویسی اضافه
  • وجود باگ و مشکلات کمتر
  • آسانی کار با تکنولوژی های پیشرفته
  • استفاده از کدهای آماده بدون نیاز به انجام کار های اضافه
  • آسان تر بودن تست و مشکل زدایی (debug) کدها
  • کاهش زمان توسعه

تفاوت کتابخانه (library) و فریم ورک (framework)

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

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

تفاوت بسیار بزرگ تر و اصلی بین کتابخانه ها و فریم ورک ها اینجاست که کتابخانه ها توسط کدهای شما صدا زده می شوند در حالی که فریم ورک است که کدهای شما را صدا می زند! یعنی چه؟ بگذارید یک مثال ساده برایتان بزنم. کتابخانه CURL یک کتابخانه در زبان PHP است که به PHP اجازه می دهد با API های مختلف و سرورهای دیگر در ارتباط باشد. زمانی که می خواهیم از این کتابخانه در PHP استفاده کنیم، این کدهای PHP شما است که توابع موجود در این کتابخانه را صدا می زند. از طرف دیگر زمانی که از یک فریم ورک PHP مانند لاراول استفاده می کنیم، رابطه برعکس می شود! یعنی لاراول کدهایی که توسط شما نوشته شده است را صدا زده و اجرا می کند. به این موضوع IOC یا Inversion of Control می گوییم که در فارسی به «وارونگی کنترل» ترجمه می شود.

فریم ورک یا میانبر؟ یک تله بزرگ!

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

بنابراین پیشنهاد می کنم بدون یادگیری زبان PHP اصلا به فکر یادگیری فریم ورک های آن و آموزش لاراول نباشید. لزومی ندارد که یادگیری زبان PHP برای شما در حد استادی باشد اما باید با اکثر مباحث PHP آشنا باشید و نحوه تعامل آن با سرور را بدانید.

لاراول چیست؟

لاراول مشهورترین و بزرگترین فریم ورک برای زبان PHP است که سرعت توسعه برنامه های وب شما را بسیار بالا می برد. با اینکه لاراول بزرگترین فریم ورک PHP برای برنامه های تحت وب است، توسعه دهنده آن، آقای Taylor Otwell، آن را به صورت کاملا رایگان عرضه کرده است و و هیچ قسمت پولی ندارد. این مسئله باعث افزایش محبوبیت آموزش لاراول شده است. همچنین لازم به ذکر است که لاراول متن باز (open-source) است، بنابراین می توانید کدهای درون آن را به راحتی مشاهده کنید. آموزش لاراول ویژگی های خاص خودش را دارد که باید در این بخش مورد بررسی ما قرار گیرند.

لاراول در چه زمینه ای کاربرد دارد؟

همانطور که توضیح دادم لاراول یک فریم ورک برای زبان PHP و توسعه برنامه های تحت وب است. یکی از دلایل محبوبیت آموزش لاراول این است که فرآیند توسعه وب را بسیار آسان تر می کند؛ به طور مثال لاراول routing (مدیریت URL ها) و قالب سازی HTML (تزریق داده از پایگاه داده به HTML) و authentication (احراز هویت) را به صورت آماده در خودش دارد و شما می توانید به راحتی از آن استفاده کنید.

طبیعتا از آنجایی که لاراول برای زبان PHP نوشته شده است، به طور کلی یک تکنولوژی server-side یا back-end محسوب می شود، گرچه که opinionated یا «صاحب نظر» محسوب می شود (در این باره بیشتر صحبت خواهیم کرد). با این حساب لاراول مسئولیت بخش back-end وب سایت شما را بر عهده می گیرد و انتخاب تکنولوژی های front-end (مثل HTML ساده یا React و Vue و غیره) بر عهده خود شما است. نهایتا اگر برنامه شما بیشتر شبیه به برنامه های وبلاگی است که می خواهید پست هایی را در آن منتشر کنید، می توانید از لاراول به همراه WordPress استفاده نمایید که یکی از پیشرفته ترین سیستم های مدیریت محتوا برای زبان PHP است.

بازار کار لاراول

لاراول یکی از محبوب ترین تکنولوژی های موجود در بازار ایران است بنابراین همیشه استخدام خواهد داشت اما مشخص کردن یک قیمت خاص بسیار سخت است. درآمد توسعه دهندگان لاراول معمولا بسته به تجربه، سطح، شهر و محل کار و عوامل مختلفی دارد. با نگاهی به آگهی های استخدامی خواهید دید که این درآمد می تواند بین ۴ تا ۱۰ میلیون نیز باشد! ما به آگهی خاصی از یک شرکت ایرانی برخورد کردیم که برای متخصصین لاراول با تجربه بالا، ۱۶ میلیون تومان نیز پرداخت می کرد. درآمد جهانی توسعه دهندگان لاراول نیز معمولا بین ۶۰ تا ۹۰ هزار دلار در سال است.

آیا یادگیری لاراول سخت است؟

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

معماری MVC

لاراول از معماری MVC پیروی می کند، آیا با آن آشنا هستید؟ معماری های مختلفی برای توسعه برنامه های تحت وب وجود دارند اما MVC یکی از مشهور ترین آن ها است. در این معماری خاص برنامه های تحت وب به سه قسمت Model و View و Controller تقسیم می شوند و به همین دلیل نام این معماری MVC انتخاب شده است. هر کدام از بخش های Model و View و Controller جنبه خاصی از برنامه شما را شامل می شوند بنابراین باید با آن ها آشنا شویم تا بتوانیم نحوه کار لاراول را درک کنیم.

جزئیات معماری MVC و روابط بین اجزای آن
 جزئیات معماری MVC و روابط بین اجزای آن

بخش View: این بخش مسئول نمایش داده های برنامه است و به زبان ساده بخشی است که کاربر آن را مشاهده می کند. با این حساب در برنامه های تحت وب، View همان فایل های HTML شما خواهند بود که در مرورگر کاربر بارگذاری می شوند. تمام منوهای آبشاری یا textare یا فرم ها و تصاویر و غیره جزئی از View محسوب می شوند. احتمالا برایتان سوال می شود که View این داده ها را از کجا می آورد؟ View داده هایش را از Model می گیرد،‌ اما نه به صورت مستقیم!

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

بخش Model: این بخش مسئول مدیریت و ذخیره سازی داده های برنامه است که کاربر با آن ها سر و کار دارد. به زبان ساده تر Model همان بخش پایگاه داده برنامه ما است. من برایتان توضیح دادم که View داده هایش را از Model می گیرد و حالا باید متوجه حرف من شده باشید. مثلا اگر بخواهیم سفارشات یک مشتری را به او نمایش بدهیم، ابتدا controller که مغز برنامه است، چنین درخواستی را از سمت کاربر می بیند و داده ها را از Model گرفته و سپس به View پاس می دهد.

اگر بخواهیم به همان مثال ماشین برگردیم چطور؟ ما وب سایت خودمان را به صورت یک ماشین تصور می کنیم. در این حالت View همان قسمت ظاهری ماشین مانند فرمان، ترمز، دنده، داشبورد و امثال آن است. قسمت Controller همان بخش داخل کاپوت ماشین مانند موتور، رادیاتور و امثال آن است. نهایتا Model همان باک بنزین شما است.

معماری MVC به صورت خلاصه
معماری MVC به صورت خلاصه

مزایای معماری MVC

معماری MVC مزایای خاص خودش را دارد. من سعی کرده ام در این بخش برخی از مزایای مهم معماری MVC را برایتان توضیح بدهم:

  • معمولا مهم ترین مزیت معماری MVC مبحث separation of concern یا «تفکیک دغدغه» است. یعنی دغدغه های توسعه دهنده از هم جدا شده و در هم آمیخته نیست.
  • مدیریت کدها و بزرگ تر کردن برنامه شما راحت تر است چرا که کدهای سه قسمت اصلی برنامه از هم جدا هستند.
  • کامپوننت های مختلف MVC می توانند به صورت جداگانه تست شوند.
  • می توان توسعه بخش های مختلف برنامه را به صورت موازی انجام داد. این مسئله کمک بزرگی برای تیم های توسعه است چرا که می توانند فارغ از وضعیت هر بخش، روی بخش دیگری کار کنند.
  • درک عملکرد برنامه در معماری MVC ساده تر است، مخصوصا زمانی که با پروژه های بسیار بزرگ روبرو شویم.
  • بهترین روش برای test-driven development (توسعه تست محور) است.
  • معماری MVC با استاندارد های SEO منطبق بوده و از این نظر هیچ مشکلی ایجاد نمی کند.
  • معماری MVC منطق مرتبط در کدهای شما را در قالب یک controller دسته بندی می کند و به آن نظم خاصی می دهد.

معایب معماری MVC

در کنار مزایای ذکر شده طبیعتا معایبی نیز برای معماری MVC در نظر گرفته می شود. چند مورد از این معایب را در لیست زیر مشاهده می کنید.

  • خواندن سورس کد در پروژه های بسیار بزرگی که از MVC استفاده کرده اند برای افراد تازه کار سخت خواهد بود.
  • استفاده دوباره از منطق و کدها در این معماری دشوار است چرا که هر بخش به صورت منطقی از بخش های دیگر جدا شده است بنابراین یک کد خاص معمولا reusable نیست یا قابلیت استفاده مجدد را ندارد.
  • برای داشتن سرعت توسعه بالا نیاز به چندین توسعه دهنده داریم تا به صورت موازی روی بخش های مختلف برنامه کار کنند.
  • برای کار با معماری MVC نیاز به چندین مهارت یا دانش مختلف دارید بنابراین یادگیری آن برای تازه کار ها زمان خواهد برد.

سیستم Eloquent ORM در لاراول

یکی از نقاط قوت لاراول که طرفداران بسیار زیادی دارد وجود یک ORM خاص به نام Eloquent است. برای اینکه با این بحث آشنا بشوید باید ابتدا برایتان توضیح بدهم که ORM ها چه چیزی هستند.

نحوه ی کار ORM لاراول
نحوه کار ORM لاراول

ORM خلاصه عبارت Object-Relational-Mapper هستند و اگر از افراد تازه کار در این حوزه باشید احتمالا با خواندن آن کمی سر در گم شوید. در توسعه وب عادی و بدون ORM ها برای نوشتن کوئری های پایگاه داده از زبان SQL استفاده می کنیم (البته اگر پایگاه داده تان MySQL یا امثال آن باشد). مثلا برای دریافت کاربری با یک ایمیل خاص می گوییم:

SELECT * FROM users WHERE email = 'test@test.com';

این یک کوئری ساده SQL است و انجام این کار هیچ مشکلی ندارد اما برخی از اوقات نوشتن کوئری های SQL زمان بر و سخت می شود. اینجاست که ORM ها وارد کار می شوند. مثلا اگر بخواهیم همین عملیات (دریافت کاربر بر اساس ایمیلی خاص) را با استفاده از یک ORM بنویسیم، کدی به شکل زیر خواهیم داشت:

$user = orm("users").where({ email: 'test@test.com' });

احتمالا با خودتان می گویید که این دو کد تفاوت زیادی ندارند و حرفتان درست است. قدرت ORM ها زمانی نشان داده می شود که کوئری های SQL شما پیچیده شود و مطمئن باشید اینچنین خواهد شد. مثلا اگر یک وبلاگ داشته باشیم، هر پست یک نویسنده دارد که خودش یک کاربر است و هر کاربر می تواند چندین پست داشته باشد. از طرف دیگر هر پست می تواند چندین کامنت داشته باشد اما هر کامنت می تواند فقط به یک پست تعلق داشته باشد. این روابط در برنامه های واقعی پیچیده می شوند و نوشتن SQL با دستورات Join واقعا آزاردهنده خواهد بود. به طور مثال:

SELECT
gameTeam.gameTeamId,gameTeam.gameId,gameTeam.gameNumber
	,gameTeam.slot,gameTeam.misconduct
	,poolTeam.regTeamId,poolTeam.regTeamName
	,poolTeam.division,poolTeam.poolTeamKey
	
FROM gameTeams AS gameTeam
LEFT JOIN poolTeams AS poolTeam ON poolTeam.poolTeamId = gameTeam.poolTeamId WHERE gameTeam.gameId IN (?)
ORDER BY gameNumber,slot

حتی خواندن چنین کوئری آزاردهنده است چه برسد به نوشتن آن!

Eloquent یک ORM برای لاراول است که انجام این کار را بسیار آسان تر می کند. شما می توانید با شرکت در دوره های مختلف آموزش لاراول در روکسو، لاراول را به صورت کامل یاد بگیرید!