Laravel Macro

Selamlar, hiç dahili Laravel bileşenlerinde olmayan bir methodun eksikliğini hissettiniz mi ? O zaman sizi Makrolarla tanıştıralım 🙂 Makrolar, dahili Laravel bileşenlerine özel işlevler eklemenize olanak tanır.

Bir örnekle konuya giriş yapalım. Mesela Laravel’in Illuminate\Http\Request bileşenini kullanıyorsunuz ve $request->all() kullanarak client tarafından gelen verileri alıyorsunuz. Peki bu verileri tree object olarak almak istersek ?

Basitçe yapmamız gereken :

$inputs = json_decode(json_encode($this->all()));

Şeklinde olacaktır. Tree object kullanmak için her controller methodunda yukaıdaki kodu kopyalamak yerine Request için Macro tanımlayarak Request bileşenine bu özelliği eklemeye ne dersiniz ?

app/Providers/AppServiceProvider.php

public function boot()
{
    Request::macro('toObject', function () {
        return json_decode(json_encode($this->all()));
    });
}

Artık Request bileşeninin toObject() methodu var. Controller methodu içerisinde aşağıdaki gibi kullanabilirsin

$inputs = $request->toObject();

Her ne kadar bu yöntem doğru şekilde çalışsada ben macroları AppServiceProvider içerisine ekleme taraftarı değilim. Bunun yerine ilgili bileşen için Provider oluşturarak Macrolar tanımlamak daha mantıklı geliyor.
Şimdi Request bileşeni için Provider oluşturalım.

php artisan make:provider RequestProvider

app/Providers/RequestProvider.php

public function boot()
{
    Request::macro('toObject', function () {
        return json_decode(json_encode($this->all()));
    });
}

Sıra geldi RequestProvider‘ı Laravel providers‘a eklemeye.

config/app.php

'providers' => [
    // ...
   App\Providers\RequestProvider::class,
];

Artık RequestProvider’ı kullanarak Illuminate\Http\Request bileşenine dilediğimiz Macroları ekleyebiliriz.

$inputs = $request->toObject();

Umarım işinize yaramıştır.

Yorum Ekle

E-posta hesabınız yayımlanmayacak.

Gerçek kişi doğrulaması
61 − 51 =