سلام دوستان لاراولی 😉 الان قسمت اول از مجموعه پست‌های ۸۰ سوال مصاحبه لاراول رو بررسی می‌کنیم. قبلش مقدمه و قسمت نکته دوستانه رو بخونین.

سوالاتی توی این قسمت بررسی می‌کنیم:

  1. از لاراول چی می‌دونید؟
  2. لاراول و لومن چه تفاوت‌هایی با هم دارن؟
  3. چند تا از پوشه‌های مهم لاراول رو نام ببرید
  4. پوشه‌ی بوت‌استرپ چه کاربردی داره؟
  5. کاربرد میدل‌ور چیه؟
  6. آرتیزان چیه؟
  7. متدهای has و filled توی درخواست‌ها چه تفاوتی دارن؟
  8. ORM چیه؟
  9. Eloquent چیه؟
  10. چند تا از روابط الوکوئنت رو نام ببرید

 

1. از لاراول چی می‌دونید؟

لاراول محبوب‌ترین فریم‌ورک PHP هست و از معماری MVC تبعیت می‌کنه. با اینکه یک فریم‌ورک بک‌اند حساب میشه، اما برای مباحث فرانت‌اند هم امکانات کاربردی مثل Blade و Mix ارائه میده. چون از کامپوزر (Composer) استفاده می‌کنه، خیلی راحت میشه از پکیج‌ها و کتابخونه‌های خارجی استفاده و اونها رو مدیریت کرد. موضوع امنیت مثل پشتیبانی از یک سیستم احراز هویت قدرتمند از نقاط قوت این فریم‌ورک هست. ابزارها و ویژگی‌های کاربردی برای کار با دیتابیس مثل پشتیبانی از ORM و الوکوئنت، آرتیزان برای بهره‌گیری از خط فرمان برای مدیریت پروژه با دستورات فراوان، از امکانات منحصر به فردی هست که میشه به اون اشاره کرد.

 

2. لاراول و لومن چه تفاوت‌هایی با هم دارن؟

لومن (Lumen) یک میکرو فریم‌ورک از سازندگان لاراول هست. یعنی یک لاراول کوچیک و جمع و جور. هدف لومن سرعت و سبکی هست و بیشتر برای پیاده‌سازی API طراحی شده و برای همین خیلی از ویژگی‌های لاراول مثل بلِید (Template Engine)، سشن، روتینگ، الوکوئنت و بعضی از دستورات آرتیزان رو نداره یا فقط ورژن ساده‌ای از اونها رو داره.

 

3. چند تا از پوشه‌های مهم لاراول رو نام ببرید

مهمترین پوشه‌ی لاراول، پوشه app هست که توی اون کدهای هسته‌ی برنامه‌مون قرار می‌گیره. پوشه‌ی config که بطور مجتمع شامل تمام متغیرها و تنظیمات برنامه هست. پوشه‌ی routes که برای مسیریابی برنامه استفاده میشه.

مصاحبه کننده می‌خواد بدونه که چقدر با پوشه‌ها آشنایی دارین. قطعاً همه پوشه‌های مسیر root مهم هستن و می‌تونین هر کدوم رو نام ببرین. برای اینکه بطور کامل با ساختار پوشه‌ها در لاراول آشنا بشین، می‌تونین این پست رو ببینین.

 

4. پوشه‌ی بوت‌استرپ چه کاربردی داره؟

این پوشه توی مسیر اصلی (root) پروژه قرار داره. فریم‌ورک از این مسیر برای راه‌اندازی پروژه استفاده می‌کنه. این مسیر شامل یک فایل هست به اسم app.php که وظیفه راه‌اندازی فریم‌ورک رو به عهده داره.

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

 

5. کاربرد میدل‌ور چیه؟

میدل‌ورها (Middleware) برای فیلتر کردن درخواست‌های HTTP که به سمت برنامه میاد استفاده میشن. به زبان ساده‌تر، میدل‌ور یک واسط هست. یک واسط بین درخواستی که از سمت کاربر میاد و برنامه‌ی ما.

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

 

6. آرتیزان چیه؟

Artisan یک رابط خط فرمان (CLI) اختصاصی لاراول هست که سرعت فوق‌العاده‌ای به توسعه‌ی برنامه می‌بخشه. با اون می‌تونیم کنترلرها، مایگریشن‌ها، میدل‌ویرها، مدل‌ها و ... رو با خط فرمان بسازیم. با آرتیزان می‌تونیم قسمت‌های زیادی از پروژه رو مدیریت کنیم. همچنین تنظیمات اصلی برنامه و تنظیمات اختصاصی پکیج‌ها رو میشه با آرتیزان تغییر داد و مدیریت کرد.

برای اینکه همه دستورات آرتیزان رو ببینیم، از دستور زیر توی خط فرمان یک پروژه لاراولی استفاده می‌کنیم:

$ php artisan list

هر دستور آرتیزان هم یک Help داره که بصورت زیر می‌تونیم از اون استفاده کنیم:

$ php artisan help migrate

 

7. متدهای has و filled چه تفاوتی دارن؟

متد has بررسی می‌کنه که آیا یک ورودی توی درخواست وجود داره یا نه، بی‌توجه به اینکه به این ورودی مقداری نسبت داده شده باشه یا نه. اگه ورودی توی درخواست وجود داشته باشه خروجی این متد true هست.

متد filled علاوه‌بر اینکه بررسی می‌کنه که آیا یک ورودی توی درخواست وجود داره، بررسی می‌کنه که این ورودی empty هست یا نه. اگه ورودی توی درخواست وجود داشت و مقدار اون empty نبود، خروجی این متد true هست:

// example.com/user?jump=&run=1&eat=0

$request->has('jump'); // true

$request->filled('jump'); // false
$request->filled('eat'); // true

برای اطلاعات کامل‌تر، می‌تونین این پست درباره درخواست‌ها (Request) لاراول رو بخونین.

 

8. ORM چیه؟

آیا توی کد زیر دستور SQL خام می‌بینید؟

DB::table('pens')->take(5)->select('title')->get();

با اینکه می‌دونیم کد بالا یک کوئری به دیتابیس هست، هیچ کد SQL نمی‌بینیم. چیزی که می‌بینیم، کدهای PHP هستن. آیا از این اطلاع داریم که کوئری بالا برای MySQL هست یا MongoDB؟ خیر و شاید مهم نیست. این یعنی ORM.

ORM مخفف Object-Relational Mapping و یک موضوع کلی هست که فقط مخصوص لاراول نیست. با ‌ORM می‌تونیم با استفاده از کدها و دستورات زبانی که داریم کار می‌کنیم (اینجا PHP)، به دیتابیس کوئری بزنیم، اطلاعات رو بخونیم و تغییر بدیم بدون اینکه با کدهای خام SQL سر و کار داشته باشیم.

از خوبی‌های استفاده از ORM اینه که یک لایه انتزاعی درست میشه. اگه در آینده نوع دیتابیس و ساختار دستورات عوض بشه، لازم نیست کدهای هسته برنامه تغییر کنه. همچنین توی یک فایل PHP، فقط کدهای PHP می‌بینیم و پیچیدگی‌ها از قبل مخفی و کپسوله (Encapsulated) شدن. از جاهایی که توی لاراول از ORM استفاده شده، میشه به مایگریشن‌ها، سیدرها و الوکوئنت اشاره کرد.

 

9. Eloquent چیه؟

الوکوئنت (Eloquent) که یکی از دوست‌داشتنی‌ترین و کاربردی‌ترین ویژگی‌های لاراول به حساب میاد، حالت پیاده‌سازی شده ORM توی این فریم‌ورک هست. با الوکوئنت می‌تونیم با دستورات PHP و بصورت شی‌گرایی با دیتابیس ارتباط برقرار کنیم، اطلاعات رو بخونیم و تغییر بدیم. برای اینکه با الوکوئنت کار کنیم، نیاز به مدل (Model) داریم. وظیفه هر مدل اینه که با جدولی که بهش نسبت می‌دیم تعامل داشته باشه. مثلاً مدل User وظیفه داره تا بصورت ORM با جدول users توی دیتابیس تعامل داشته باشه:

Mountain::select('id', 'name')
    ->where('status', 1)
    ->take(10)
    ->get();

کد بالا یک نمونه ساده از الوکوئنت (ORM) توی لاراول هست که همونطور که می‌بینیم هیچ کدی غیر از PHP دیده نمیشه و برای توسعه‌دهنده مهم نیست که نوع دیتابیس و اسم جدول چه چیزی هست و از چه تنظیماتی داره استفاده میشه.

بدون استفاده از الوکوئنت و ORM باید اینطوری کد می‌نوشتیم:

SELECT id, title FROM mountains WHERE status = 1 LIMIT 10

یعنی علاوه بر اینکه کدهای ما شامل دستورات و کدهای یکپارچه نیست، توسعه‌دهنده باید اطلاعات بالایی از دستورات SQL داشته باشه.

 

10. چند تا از روابط الوکوئنت رو نام ببرید

۸ نوع رابطه الوکوئنت داریم:

  •     یک به یک (One To One)
  •     یک به چند (One To Many)
  •     چند به چند (Many To Many)
  •     یک به یک واسطه‌ای (Has One Through)
  •     یک به چند واسطه‌ای (Has Many Through)
  •     یک به یک (پلی مورفیک)
  •     یک به چند (پلی مورفیک)
  •     چند به چند (پلی مورفیک)

برای آشنایی با مفهوم روابط الوکوئنت و ۸ رابطه بالا، می‌تونین این مجموعه از پست‌ها رو بخونین.

 

خب دوستان قسمت اول به پایان رسید. روزتون خوش 😉✌️

منابعی که برای این پست استفاده کردم: