Laravel Service Injection

Merhaba arkadaşlar,

Laravel’de geliştirdiğim projede view’da geliştirdiğim bir kütüphanenin metoduna belirli parametreler göndererek işlem yapmam gerekiyordu. Phalcon’a aşina olanlar Service Injection’u bilirler 🙂 Bunu Laravel’de şu şekilde yapabiliyorsunuz;

// user/partials/avatar.blade.php
@inject('image', 'App\Services\BuildImage')

<h3>Image</h3>

<div class="avatar-display">
     {{ $image->getImage('avatar', 'medium', 'aws') }}
</div>

Evet gördüğünüz gibi app/Services altında oluşturduğunuz BuildImage içerisinde tanımladığınız getImage($var1, $var2, $var3 ..) metoduna 3 adet parametre gönderdik.

Diğer view dosyalarında da bunu kullanmak istiyorsanız her seferinde aynı classı her view’da tek tek @inject ettiğinizde kendinizi tekrar etmiş olursunuz! DRY! WTF!

Aşağıda yolunu verdiğim dosyayı bu şekilde düzenleyin;

// app/Providers/AppServiceProvider.php

public function boot()
{        
    view()->composer('*', function($view){
       $view->with('image', new BuildImage);
    });
}

İşte bu kadar artık getImage metoduna view katmanında @inject etmeye gerek kalmadan kullanabilirsiniz.
Kaynaklar:
1 – https://laravel.com/docs/5.2/views#view-composers
2 – https://docs.phalconphp.com/en/latest/reference/di.html