Laravel Service Injection

Bu yazı 2016 yılında yazıldı. Bazı bilgiler ve araçlar güncelliğini yitirmiş olabilir.

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

Mustafa Toker

Backend mühendisi ve ekip lideri. JVM, Spring Boot, Oracle ve yapay zekâ destekli yazılım geliştirme üzerine sahadan notlar yazıyorum.