آشنایی با دستیارهای لاراول! - helper functions

هلپر فانکشنها در لاراول (Helper Functions) یکی از دهها امکانات عالی این فریمورک محبوب محسوب میشن و امروز میخوام یک هلپر واقعا کاربردی که خیلی خیلی کمبودش احساس میشد و توی ورژن جدید اضافه شده (نسخه 5.6) رو معرفی کنم خدمتتون.


هِلپر چی هست اصلا؟!

کدهای کمکی یا هلپرها، یک سری توابع (functions) از پیش آماده عمومی (global) برای انجام کارهای تکراری هستش که در سراسر پروژه هایی که با لاراول نوشته میشه در دسترس و قابل استفاده هستن (در ویووها (blade templates)، کنترلرها، مدلها و ...).

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

https://laravel.com/docs/5.6/helpers

معرفی هلپر فانکشن optional

توی اکثر پروژه ها پیش میاد که بر فرض میخواید چک کنید که اگر یک یوزر آدرس ایمیل داره یه پردازش روش انجام بدید و اگر هم Null هستش کار دیگه ای رو صورت بدید تا برنامه دچار خطا نشه. هلپر آپشنال دقیقا برای همینکار نوشته شده و شما رو از نوشتن کد بررسی این قضیه و شرط گذاشتن مدام برای این کار و مواردی از این دست بی‌نیاز میکنه.

نمونه کد و مثال شماره 1:

// User 1 exists, with account
$user1 = User::find(1);
$accountId = $user1->account->id; // 123

// User 2 exists, without account
$user2 = User::find(2);
$accountId = $user2->account->id; // PHP Error: Trying to get property of non-object

// Fix without optional()
$accountId = $user2->account ? $user2->account->id : null; // null
$accountId = $user2->account->id ?? null; // null

// Fix with optional()
$accountId = optional($user2->account)->id; // null

نمونه کد بالا در صورتی که کاربر account id داشته باشه اون رو توی متغیر $accountId قرار میده.

معادل همین کدها هم با هلپر آپشنال در 2 خط آخر قابل مشاهده هستن:)

نمونه کد شماره 2:

  • اگر خیابان تهی نباشه برگردونده میشه بجای اینکه خطا تولید بشه و اگه نباشه هم null برمیگرده
return optional($user->address)->street;

نمونه کد شماره 3:

  • اگر یوزرنیم وجود داشته باشه نوشته میشه و اگه نباشه چیزی چاپ نمیشه.
{!! old('name', optional($user)->name) !!}

امیدوارم خوشتون اومده باشه.

لینک مفید:
https://laravel-news.com/5-laravel-helpers-make-life-easier