Memulai Pembuatan Aplikasi Web dengan Yii2 (7): Menggunakan Session dan Flash Data

Muhammad Arslan 6 September 2016

Memulai Pembuatan Aplikasi Web dengan Yii2 (7): Menggunakan Session dan Flash Data

Session dan flash data adalah salah satu fitur PHP yang digunakan untuk menyimpan suatu nilai dari variabel untuk digunakan di berbagai "halaman" lainnya. Session akan terus disimpan di server sampai akhirnya dihancurkan oleh mekanisme logout atau penghancuran session tertentu. Session pun dapat disimpan tidak hanya di memori, di database dan file pun dapat dilakukan.

Flash data sama seperti session hanya saja digunakan sekali. Misal ketika gagal melakukan login, akan muncul sebuah pesan yang menyatakan bahwa kita gagal login. Kemudian bila halaman tersebut di-refresh, maka pesan tadi tidak akan muncul lagi. Hal tersebut berguna juga misal bila suatu form gagal divalidasi, maka hasil validasinya dimunculkan kembali ke halaman form tersebut.

Sekarang mari kita coba lihat bagaimana session dan flash data bekerja di Yii2.

Persiapan Coding

Sebelum mengikuti tutorial ini, kita harus membuat sebuah file controller terlebih dahulu. Kita namai file tersebut dengan nama HelloSessionController.php. Taruh file tersebut di folder controllers. Kemudian buat kode berikut di dalam file tersebut.
<?php

namespace app\controllers;

use Yii; use yii\filters\AccessControl; use yii\web\Controller;

class HelloSessionController extends Controller {

public function actions()
{
    return [
        'error' =&gt; [
            'class' =&gt; 'yii\web\ErrorAction',
        ],
    ];
}

}

Kemudian pastikan, Anda sudah mengisi cookieValidationKey dengan key Anda sendiri. Lihat contoh konfigurasinya seperti berikut:

$config = [
    'id' => 'basic',
    /*'defaultRoute' => 'hello',
    'controllerMap' => [
        // declares "account" controller using a class name
        'demo' => 'app\controllers\HelloController',
    ],*/
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'components' => [

        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'rahasia12345',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],

    ........................................................


Menggunakan Session

Sekarang mari kita lanjutkan controller diatas dengan membuat beberapa action untuk menguji session di Yii2. Action yang dibuat terdiri dari beberapa yaitu, actionIndex(), actionDisplay(), dan actionDestroy(). Anda dapat memanggil session dengan menampung Yii::$app->session ke suatu variabel. Untuk menympan suatu nilai, kita dapat menggunakan method set(key, value) untuk menyimpan suatu nilai. Untuk mengambil nilai pada session digunakan method get(key), dan untuk menghapusnya digunakan method remove(key).

Berikut adalah source code lanjutan HelloSessionController.php untuk mendemokan bagaimana session bekerja:

<?php

namespace app\controllers;

use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;

class HelloSessionController extends Controller
{

    ...........................................


    public function actionIndex()
    {
        $session = Yii::$app->session;
        $session->set('language', 'en-US');
        $session->set('dialect', 'California');

        echo "Memasang session di halaman index";
    }

    public function actionDisplay()
    {
        $session = Yii::$app->session;
        echo $session->get('language');
        echo "<br/>";
        echo $session->get('dialect');
    }

    public function actionDestroy()
    {
        $session = Yii::$app->session; 

        $session->remove('language');
        $session->remove('dialect');

        echo "Menghapus session";
    }
}

Berikut adalah screenshot dari action - action diatas:

Selection_010

Menggunakan Flash Data

Masih di controller yang sama, kita akan melanjutkan bagaimana flash data bekerja di Yii2. Untuk memasang sebuah flash data, kita dapat menggunakan method setFlash(key, value). Untuk mengambilnya di halaman lain, kita dapat menggunakan getFlash(key, value). Silahkan buat dua action berikutnya seperti pada source code lanjutan berikut:
<?php

namespace app\controllers;

use Yii; use yii\filters\AccessControl; use yii\web\Controller;

class HelloSessionController extends Controller {

...........................................


public function actionFlashData()
{
    $session = Yii::$app-&gt;session; 

    $session-&gt;setFlash('message', 'Ini adalah pesan flash data dari hello-session/flash-data...');
    $session-&gt;setFlash('message_kedua', 'Ini adalah pesan kedua flash data dari hello-session/flash-data...');
    $session-&gt;setFlash('message_ketiga', 'Ini adalah pesan ketiga flash data dari hello-session/flash-data...');

    return $this-&gt;redirect('/hello-yii/web/index.php?r=hello-session/flash-display');
}

public function actionFlashDisplay()
{
    $session = Yii::$app-&gt;session; 

    echo "Menampilkan flash data... &lt;br/&gt;";

    echo $session-&gt;getFlash('message');
    echo "&lt;br/&gt;";
    echo $session-&gt;getFlash('message_kedua');
    echo "&lt;br/&gt;";
    echo $session-&gt;getFlash('message_ketiga');
}

}

Berikut adalah screenshot dari kedua action diatas:

Selection_014

Penutup

Yii2 sudah mengemas session dan flash data dengan lebih cantik dan enak untuk digunakan. Ada berbagai penggunaan lainnya seputar flash data dan session yang dapat Anda temukan di "The Defintive Guide to Yii2". Selamat mencoba.

(codepolitan/yiiframework)