Sharing Data Menggunakan View Composer Di Laravel

Anugrah Sandi 2 November 2017

Sharing Data Menggunakan View Composer Di Laravel

Pada kesempatan kali ini kita akan membahas fitur lainnya yang tak kalah menarik dari Laravel. Fitur ini memungkin anda untuk melakukan parsing data ke beberapa view tanpa harus mendefinisikan kembali data yang akan kita olah. Namun sebelum itu akan kita jabarkan terlebih dahulu poin apa saja yang akan kita capai dalam pembahasan kali ini agar pembelajaran kita menjadi lebih terarah. Adapun poin tersebut adalah:

  1. Mengenali Views
  2. Passing Data ke Views
  3. Menggunakan View Composer

Baca Juga: Menggunakan Seeder di Laravel

Mengenali Views

Views yang berarti tampilan, dapat kita simpulkan bahwa views bekerja untuk melayani permasalahan tampilan pada aplikasi anda dan terpisah dari controller. Views pada Laravel ditempatkan pada direktori resources/views. Views di Laravel menggunakan blade template, maka setiap nama file yang akan disimpan diakhiri dengan .blade.php, example: index.blade.php. Secara sederhana views dapat dituliskan seperti berikut :

<html>
 <head>
   <title>Views Di Laravel</title>
 </head>
 <body>
   <h1>Halo, {{ $nama }}</h1>
 </body>
</html>

Karena code diatas disimpan ke resources/views/index.blade.php, kita dapat me-return menggunakan helper view seperti ini :

Route::get('/', function () {
    return view('index', ['nama' => 'nuge']);
});

Seperti yang terlihat diatas, argumen pertama yang digunakan pada helper view adalah nama dari file view yang terletak pada direktori resources/views. Argumen kedua adalah data array yang dapat digunakan pada view. Pada kasus ini, kita mem-parsing variable nama, yang akan di tampilkan pada view menggunakan Blade syntax.

Selain itu view juga dapat ditempatkan pada sub-direktori pada direktori resources/views. notasi "dot" dapat digunakan untuk masuk kedalam sub-direktori pada views. Sebagai contoh, kita akan menempatkan file index.blade.php kedalam direktori user, maka path lengkapnya: resources/views/user/index.blade.php. Sehingga pada helper view yang akan di return tepatnya di argumen pertama akan menjadi seperti ini :

return view('user.index', ['nama' => 'nuge']);

Passing Data ke Views

Passing data atau mengirim data ke view sehingga dapat digunakan. Ketika mem-parsing data dengan cara ini, data harus berupa array yang berpasangan antara key dan* value*. Di dalam view, anda juga dapat mengakses data tersebut menggunakan key yang sesuai. Pada contoh sebelumnya kita telah mengirim sebuah data dalam bentuk array dengan key nama dan value nuge. Maka kita dapat mencetak data pada view dengan *code *: <?php echo $nama; ?>

Jika anda ingin menambahkan data lainnya, semisal dengan key profesi dan value programmer, maka cukup pisahkan dengan koma.

return view('index', ['nama' => 'nuge', 'profesi' => 'programmer']);

Cara diatas cukup efektif untuk menangani data yang bersifat individu atau hanya digunakan oleh view tertentu saja, tapi jika sebuah data yang akan kita oleh sifatnya global, maka tentu saja akan sangat merepotkan jika kita harus mendefinisikan satu persatu pada setiap view yang akan digunakan. Maka di Laravel kita menawarkan fitur yang cukup menarik yang bernama view composer.

Tapi sebelum membahas tentang view composer, kita akan berkenalan terlebih dahulu dengan method lainnya yang bernama: share.

Baca Juga: Menggunakan Response dan View

Sharing Data With All View

Seperti yang telah disinggung sebelumnya bahwa terkadang kita perlu membagikan data ke beberapa view, maka untuk mengatasi hal ini anda dapat menggunakan facade's share method. Dan untuk menggunakannya kita perlu mendefinisikannya kedalam service provider pada method boot. Anda dapat menambahkannya pada AppServiceProvider atau membuat service provider baru. Tapi pada artikel kali ini kita akan memanfaatkan service provider yang telah ada. AppServiceProvider terletak pada direktori app/Providers.

<?php

namespace App\Providers;

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

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

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

Code yang perlu anda tambahkan pada method boot:

View::share('nama', 'nuge');

Dan jangan lupa untuk menambahkan use statement:

use Illuminate\Support\Facades\View;

Menggunakan View Composer

View composer adalah callbacks atau method dari sebuah class yang dipanggil kembali ketika sebuah view di render. Jika anda memiliki data yang akan digunakan oleh banyak views, maka view composer dapat membantu anda untuk mengantur logika tersebut untuk ditampilkan.

Sebagai contoh, buat sebuah file service provider yang akan mengatur view composer. Kita akan menggunakan facade View untuk mengaksesnya. Perlu diketahui, secara defaul Laravel tidak menyediakan direktori untuk view composers, maka silahkan buat folder ViewComposers terlebih dahulu dan tempatkan pada direktori : app/Http/ViewComposers. Buat sebuah file ComposerServiceProvider.php pada direktori app/Providers dan tambahkan code berikut:

<?php

namespace App\Providers;

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

class ComposerServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // Using class based composers...
        View::composer(
            'index', 'App\Http\ViewComposers\UserComposer'
        );
    }

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

Perlu diketahui kembali, jika anda membuat sebuah service provider baru, anda harus menambahkan service provider tersebut kedalam array providers yang terletak di file config/app.php. Tambahkan code berikut :

App\Providers\ComposerServiceProvider::class,

Sekarang kita telah memiliki sebuah composer yang telah didaftarkan, method UserComposer@compose akan dijalankan setiap kali view user di render. Sebelum itu silahkan buat file UserComposer.php kedalam direktori app/Http/ViewComposers. Lalu tambahkan potongan code berikut:

<?php

namespace App\Http\ViewComposers;

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

class UserComposer
{
    public function compose(View $view)
    {
        $view->with('nama', 'nuge');
    }
}

Sampai disini data yang anda miliki pada ViewComposer sudah dapat ditampilkan pada view. Jika anda menginginkannya untuk ditampilkan pada beberapa file view tertentu saja, anda cukup mengubah code pada ComposerServiceProvider.php:

View::composer(
    ['namaview1', 'namaview2'],
    'App\Http\ViewComposers\UserComposer'
);

Poin yang disampaikan diatas adalah alternatif yang dapat digunakan untuk mem-parsing data ke view. Adapun mana yang harus anda gunakan maka itu kembali sesuai kebutuhan anda. Semoga bermanfaat.