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

به زبان ساده، ماکرو راهی برای توسعه کلاس های Core لاراولی هستن.

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

the-magic-of-laravel-macros-feature-image

برای ایجاد این ماکرو در متد boot در AppServiceProvider تکه کد زیر رو وارد کنین.

use Illuminate\Support\Str;
Str::macro('isLength', function ($str, $length) {
    return static::length($str) == $length;
}

و حالا به راحتی متد isLength در کلاس Str در دسترس قرار میگیره.

Str::isLength('This is a Laravel Macro', 23);

حالا فرض کنید لیستی از مواردی که لازم دارید به کلاس Str اضافه کنید در اختیار دارین و میخواین اونا رو به سرویس پروایدر خودتون اضافه کنین. قطعا این هشدار در ذهنتون به وجود میاد که AppServiveProvider تون به سرعت طولانی و نامرتب میشه پس راه حل بعدی چیه؟

Mixin کلاس ها راهکاری جایگزین برای ایجاد ماکروها هستند. در این کلاس ها متدهایی با نام های مورد نظر خودتون تعریف کنید و خروجی اونا رو کلوژر هایی بذارید که عملیات های شما رو انجام میدن و سپس در AppServiceProvider کلاس Mixin رو به صورت زیر به کلاس Str اضافه کنین:

Str::mixin(new StrMixin);

کلاس Mixin شما هم به صورت زیر میشه:

class StrMixin
{
    /**
     * @return \Closure
     */
    public function isLength()
    {
        return function($str, $length) {
            return static::length($str) == $length;
        };
    }

    /**
     * @return \Closure
     */
    public function appendTo()
    {
        return function($str, $char) {
            return $char.$str;
        };
    }
}
realtime-fecade-namespace

Facadeهای Real-Time

نظر بدهید:

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

Site Footer