آموزش Automatic Injection در Service Container لاراول

آموزش Automatic Injection در Service Container لاراول

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

 

Automatic Injection چیه؟

در مرحله اول بریم به صورت تئوری با هم این قابلیت بررسی کنیم بعد مثال عملی هم باهم میبینیم. قابلیت automatic injection سرویس کانتیر به ما این امکان میده که با استفاده از متد های کلاس ها بتونیم ابکجت بسازیم و حتی نیاز به ارسال ابکجت ها نباشه!

شاید یکم عجیب بود اما بریم بهتر متوجه بشیم، آیا تا به حال در متد های کنترلر از یک کلاسی با استفاده از نوع اون (Type Hint) استفاده کرده باشید؟ بریم یک مثال ببینیم.

برای مثال فرض کنید ما یک کنترلر داریم به نام ProductController و ما میخوایم در متد index این کنترلر بیایم از کلاسی به نام ProductRepo استفاده کنیم، خب اگه ما در PHP خام بیایم این کارو انجام بدیم یا حتی یک سری از لاراول دولوپر ها میان این کار انجام میدن:

<?php

namespace AppHttpControllers;

class ProductController extends Controller
{
public function index()
{
$productRepo = new ProductRepo();
}
}

احتمال زیاد شما با کد بالا مشکلی نداشته باشید منم ندارم، اما وقتی لاراول به ما کلی امکانات خوب داده چرا استفاده نکنیم.

حالا ما میایم با استفاده از Automatic Injection خوده لاراول این کد ریفکتور میکنیم:

class ProductController extends Controller
{
public function index(ProductRepo $productRepo)
{
//
}
}

خب در اینجا دیدیم که ما در لاراول میتونیم با استفاده از مشخص کردن نوع متغیر (در این مثال ProductRepo) میتونیم یک آبجکت بسازیم.

اما هنوز تمام نشده!!

فرض کنید که کلاس ما که در این مثال ProductRepo در نظر میگیریم در ورودی (constructor) خودش یک کلاس User میخواد مثل مثال پایین:

class ProductRepo
{
public function __construct(
protected User $user
) {}
}

حالا سوالی که پیش میاد این هست که آیا ما میتونیم با اینکه کلاسمون ورودی میخواد از قابلیت Automatic Injection که در مثال بالا بود استفاده کنیم؟

صد در صد بله، اصن یکی از اهداف این قابلیت همینه شما اگه در ورودی های خودتون نوع ورودی مشخص کنید (کلاس باید باشه) خوده لاراول اون کلاس میسازه و میده بهش بدون نیاز به نوشتن چیز خاصی!

 

نکته: این قابلیت فقط روی لاراول هست و روی PHP و.. کار نمیکنید.

 

آیا دوره ای هست برای یادگیری سرویس کانتینر لاراول؟

بله در پرانتز با یک دوره کامل در مورد Service Container و نگاهی به هسته لاراول داریم که میتونید ببینید و لذت ببرید.

0 نظر

برای ارسال نظر ابتدا ثبت نام یا ورود کنید 😉