29 Ocak 2015 Perşembe

Laravel View Composer Kullanımı (Görünüm Kompozitörü)

Laravel framework kullanırken eğer  sayfa tasarımınızda (örneğin) veritabanından veri çekerek oluşturduğunuz bir bölümü bir çok sayfada kullanacaksanız, buradaki verileri çekmek için her rotada tekrar çalıştırmak yerine view composer kullanabilirsiniz. Eğer tam anlatamamışsam ki sanırım öyle :) şöyle bir örnek vereyim;

Tüm sayfalarınızda yan bölüm veya ana menü gibi bir bölüm varsa menü öğelerinide veritabanından çekiyor olabilirsiniz. Böyle bi durumda her view::make yaptığınızda sayfaya o kısmı oluşturması için değişken yollamak yerine bir view composer yazarak tek seferde işinizi halledebilirsiniz.

Öncelikle view composerı laravelin auto load ettiği bir dizine bir dosya oluşturup veya filter.php gibi zaten autoload olmuş bir dosyaya yazarak oluşturabileceğiniz gibi isterseniz yeni bir dizin oluşturup bunun autoload olması için gerekli adımları tamamladıktan sonra oraya view composer kodlarınızı yerleştirebilirsiniz. (Bu konuda kesin bir yöntem yoktur. isteğinize göre şekillendirebilirsiniz)

Ben bu basit örneğimde filter.php içerisine yazacağım view composer kodlarımı.

Basit olarak senaryo şu şekilde;
app
-----controllers
------HomeController.php
-----views
-------layout.blade.php
-------index.blade.php
-------digersayfa.blade.php
-------sidebar.blade.php
-----filter.php
-----route.php

layout.blade.php dosyası master template imiz olsun. bunu index.php extends edecek ve layout.blade.php içine sidebar.blade.php uygun yerde include edilecek.
<body>
<div>
@yield('icerik')
</div>
@include('sidebar')
</body>

index.blade.php
@extends('layout')
@section('icerik')
<h1>merhaba dünya</h1>
@stop
sidebar.blade.php
{{ $degisken }}

filter.php dosyasının en sonuna ise aşağıdaki gibi kodlarımızı eklediğimizde artık her sayfamıza $degisken e atadığımız değeri gönderecektir.
View::composer('sidebar', function($view){
   $degisken = "benim değişkenim";
   $view->with('degisken', $degisken);
});

Tabii ki bu mümkün olduğunca anlaşılır olması için bu şekilde yaptım. Burada çeşitli kontroller yaptırabilirsiniz ihtiyacınıza göre kodu şekillendirebilirsiniz.