30 Jun 2018
Laravel View Yapısı ve Kullanımı
  • 389 Okuma
  • 0 Yorum
  • 8 Beğeni

Laravel View Yapısı ve Kullanımı

Web uygulamaları daha çok frontend ve backend kısımlarından meydana gelmektedir. Bunları kısaca şöyle tanımlayabiliriz. Backend sunucu tarafında çalışan kısım, frontend kullanıcı tarafında çalışan ve kullanıcı ile etkileşim içinde olunan kısım. Bu makalemde frontend 'in bir parçası olan View yapısından ve kullanımını anlatmaya çalışacağım.


View Oluşturma

Laravel'de view'lar "resources/views" klasörü altında bulunmaktadır. Burada HTML kodu ve sunucu tarafından gönderilen verinin kullanıcıya gösterildiği dosyalar bulunmaktadır. Bu dosyaların uzantısı "blade.php" 'dir. Örnek bir "greetin.blade.php" dosya içeriği,

<html>
    <body>
        <h1>Merhaba, {{ $name }}h1>
    body>
html>


Örnekte görüldüğü gibi, "$name" değişkeni sunucu tarafından gönderilen değeri kullanmaktadır ve ekrana "Merhaba Webdeyaz" gibi gelen değer yazılmaktadır. Bu view kullanımı için, Controller üzerinde bir fonksiyon oluşturabileceğimiz gibi, doğrudan da yönlendirme (route) üzerinde de çağırabiliriz. Örnek kullanım,

Route::get('/', function () {
    return view('greeting', ['name' => 'Webdeyaz']);
});


Görüldüğü üzere, blade kısmında tanımladığımız "name" değişkenini "Webdeyaz" olarak blade'e gönderiyoruz ve blade üzerinde bu değeri ekrana yazdırıyoruz.


Bir View'ın olup olmadığının kontrolü mümkündür. Mevcut olup olmaması durumuna göre işlem yapılması mümkündür. Örnek kullanım,

use Illuminate\Support\Facades\View;

if (View::exists('emails.customer')) {
    //
}


View'lere Veri Gönderimi


Bir önceki örnekte görüldüğü gibi view'lere veri gönderimi mümkündür.  Veri gönderiminde anahtar kelime ve değeri belirtiyoruz. Bu şekilde view'e veri gönderimi birden fazla yöntemle mümkündür. Örnek kullanım,

return view('greetings', ['name' => 'Webdeyaz']);
return view('greeting')->with('name', 'Webdeyaz');


Bütün View'ler için Veri Gönderimi

Laravel'de her bir view için, kullanıcı tarafında gösterilecek verileri belirtmemiz gerekmektedir. Bunu yukarıdaki örneklerde gördük. Fakat bir ifadenin her bir her bir view üzerinde gösterilmesini kullanılmasını isteyebiliriz. Örneğin, kullanıcıya ait makale sayısını tüm view'ler üzerinde gösterilmesini istiyorsunuz. Bunun için her bir view'ın Controller ya da Yönlendirme (routing) kısmında makale sayısını hesaplatıp view'e göndermeniz gerekmektedir ki bu da kod yönetimi açısından uygun değildir. Bunun için Laravel paylaşılan (shared) view seçeneğini sunmaktadır. Bunun için "AppServiceProvider" sınıfının boot fonksiyonunda tüm view'ler üzerinde gösterilmesini istediğimiz değişken ve değerini tanımlıyoruz. Örnek kullanım,



namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::share('name', 'Webdeyaz');
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}


Bu şekilde "name" anahtar kelimesini ve değerini "Webdeyaz" olarak tüm view'lere göndermiş olduk.


View Composers

Laravel view composers yapısı ile bir view çağrıldığında, view composer sınıfı ya da fonksiyonunun çalışmasını sağlayabilirsiniz. Mesala profil adındaki view 'ı her çağırdığınızda bir takım fonskiyonların çalıştırılmasını isteyebilirsiniz. Bu durumda view composer kullanmak gerekir. Bunun için bir "Service Provider" tanımlaması yapıyoruz ve bunu "app/config.php" dosyasına kaydediyoruz. Örnek service provider,

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{
    /**
     * Register bindings in the container.
     *
     * @return void
     */
    public function boot()
    {
        // Using class based composers...
        View::composer(
            'profile', 'App\Http\ViewComposers\ProfileComposer'
        );

        // Using Closure based composers...
        View::composer('dashboard', function ($view) {
            //
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}


Composer view'ler için varsayılan bir dizin tanımlı değildir ama "app/Http/ViewComposers" klasörünü kullanabilirsiniz. Service provider oluşturduktan sonra "ProfileComposer" sınıfını oluşturuyoruz. Bu şekilde her "profile" view 'ı çağrıldığında "compose" fonksiyonu çalışacaktır. Örnek kullanım,

namespace App\Http\ViewComposers;

use Illuminate\View\View;
use App\Repositories\UserRepository;

class ProfileComposer
{
    /**
     * The user repository implementation.
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * Create a new profile composer.
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        // Dependencies automatically resolved by service container...
        $this->users = $users;
    }

    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
        $view->with('count', $this->users->count());
    }
}


Bu şekilde her "profile" view'ı çağrıldığında "compose" fonksiyonu çalışacak. Bunu başka view'leri için de tanımlayabiliriz. Örneğin hem "dashboard" hem de "profile" view'ı çalıştırıldığında ViewComposer'ın compose methodunun çağrılması örneği,

View::composer(
    ['profile', 'dashboard'],
    'App\Http\ViewComposers\MyViewComposer'
);


Bütün view'ler için kullanmak istediğimizde,

View::composer('*', function ($view) {
    //
});


View Oluşturucular (Creators)

View oluşturucular da view composers gibi çalışmaktadır. Yalnız bunlar Composers gibi view'ın tamamen çalışmasını beklemeden işleme girerler. Örnek kullanım,

View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');


Sonuç

Laravel'de view'ler kullanıcı tarafında, sunucu tarafından gönderilen verilerin gösterilmesi için kullanılırlar. Bu makalede sunucu tarafında işlenen verinin view'lere nasıl gönderildiğini ve view üzerinde nasıl gösterildiğini anlattım. Ayrıca her bir view için paylaşımlı olarak verinin gösterilmesinden ve aynı verilerin birden fazla view için nasıl çağrıldığını view composers ve view creators yapısı ile nasıl olduğunu anlattım.

Sizlere önerim, büyük çaplı uygulamalarınız için bu view yapısını kullanmamanızdır. Büyük çaplı uygulamalarınızın için Vue JS ile Single Page Application yapısını kullanmanızı tavsiye ederim.


Karşılaştığınız sorunları bana mesaj yoluyla sorabilirsiniz.

Umarım faydalı olur. İyi çalışmalar.


Makaleyi faydalı buldunuz mu ?

Yazar


Legend Engineer

Legend Engineer

Mühendis (Bilgisayar)

Bilgisayar Mühendisliği mezunuyum. Bilgisayar alanında edindiğim bilgileri bu blog üzerinde paylaşıyorum. Beni takipte kalın.

Yorumlar


İlk yorum yapan sen ol

İlginizi Çekebilir

Makale Hakkındaki Düşünçelerinizi Paylaşın