#38-Laravel API Autentikasi menggunakan JWT

Persiapan

  1. Install Laravel & Buat Proyek
  2. Buat Database laravel_api (MySQL)
  3. Setting Konfigurasi Laravel

Install & Setting JWT Package

composer require tymon/jwt-auth:dev-develop --prefer-source

Lalu buka config/app.php

Di bagian Provider tambahkan baris kode seperti di bawah ini :

Tymon\JWTAuth\Providers\LaravelServiceProvider::class;

Di Bagian Aliases tambahkan 2 baris kode seperti di bawah ini :

'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class, 
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class,

Setelah itu publish JWT Packagenya dengan mengetik perintah :

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

Lalu buat jwt-auth secretnya dengan mengetik perintah

php artisan jwt:secret

Buat Model User

buka file Model User, lokasi filenya ada di app/User.php buatlah seperti di bawah ini :

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject;

class User extends Authenticatable implements JWTSubject
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function getJWTIdentifier()
    {
        return $this->getKey();
    }
    public function getJWTCustomClaims()
    {
        return [];
    }
}

Pada Laravel table user secara otomatis sudah ada dalam database migrate, kita langsung jalankan migrate, maka table users akan otomatis tercreate di database.

php artisan migrate

Buat User Controller

Ubah isi app/Http/Controllers/UserController.php

php artisan make:controller UserController
<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;

class UserController extends Controller
{
    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');
        try {
            if (! $token = JWTAuth::attempt($credentials)) {
                return response()->json(['error' => 'invalid_credentials'], 400);
            }
        } catch (JWTException $e) {
            return response()->json(['error' => 'could_not_create_token'], 500);
        }
        return response()->json(compact('token'));
    }

    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);

        if($validator->fails()){
            return response()->json($validator->errors()->toJson(), 400);
        }

        $user = User::create([
            'name' => $request->get('name'),
            'email' => $request->get('email'),
            'password' => Hash::make($request->get('password')),
        ]);
        $token = JWTAuth::fromUser($user);
        return response()->json(compact('user','token'),201);
    }

    public function getAuthenticatedUser()
    {
        try {
            if (! $user = JWTAuth::parseToken()->authenticate()) {
                return response()->json(['user_not_found'], 404);
            }
        } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
            return response()->json(['token_expired'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
            return response()->json(['token_invalid'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
            return response()->json(['token_absent'], $e->getStatusCode());
        }
        return response()->json(compact('user'));
    }
}

Buat Middleware

php artisan make:middleware JwtMiddleware

Ubah isi app/Http/Middleware/JwtMiddleware.php

<?php

namespace App\Http\Middleware;

use Closure;
use JWTAuth;
use Exception;
use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;

class JwtMiddleware extends BaseMiddleware
{

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        try {
            $user = JWTAuth::parseToken()->authenticate();
        } catch (Exception $e) {
            if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenInvalidException){
                return response()->json(['status' => 'Token is Invalid']);
            }else if ($e instanceof \Tymon\JWTAuth\Exceptions\TokenExpiredException){
                return response()->json(['status' => 'Token is Expired']);
            }else{
                return response()->json(['status' => 'Authorization Token not found']);
            }
        }
        return $next($request);
    }
}

Tambahkan Konfigurasi Kernel

Setelah itu edit Kernel.php di app/http/Kernel.php di bagian $routeMiddleware tambahkan sebaris code berikut :

'jwt.verify' => \App\Http\Middleware\JwtMiddleware::class,

Route API

Tambahkan baris berikut pada routes/api.php

Route::post('register', 'UserController@register');
Route::post('login', 'UserController@login');
Route::get('book', 'BookController@book');

Route::get('bookall', 'BookController@bookAuth')->middleware('jwt.verify');
Route::get('user', 'UserController@getAuthenticatedUser')->middleware('jwt.verify');

Buat Book Controller

Book merupakan sebuah Page, yang berisi method book dan bookall, dimana book tidak memerlukan Autentikasi sementara bookall memerlukan autentikasi.

php artisan make:controller BookController

Berikut isi app/Http/Controllers/BookController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;

class BookController extends Controller
{
    public function book() {
        $data = "Data All Book";
        return response()->json($data, 200);
    }

    public function bookAuth() {
        $data = "Welcome " . Auth::user()->name;
        return response()->json($data, 200);
    }
}

Implementasi

Sekarang kita akan mencoba API yang telah kita buat :

Jalankan proyek laravel

php artisan serve

Buka API Tools dari Chrome, disini saya menggunakan Advanced REST client. Buka kedua url di bawah tanpa melakukan login

Request URL : http://localhost:8000/api/book

/book no-login Allow

Request URL : http://localhost:8000/api/bookall

/bookall no-login Not Allow

Lalu lakukan registrasi dan login untuk mencoba akses localhost:8000/api/bookall dengan link registrasi localhost:8000/api/register

POST register

Setelah registrasi coba melakukan login dengan email dan password yang sudah di daftarkan dengan link localhost:8000/api/login, setelah itu kita akan mendapat token, token tersebut akan kita gunakan untuk mengakses localhost:8000/api/bookall

Login

Setelah itu coba akses localhost:8000/api/bookall dengan menambahkan Bearer dan token di dalam header. Copy token yang di dapat saat melakukan login

bookall with Authorization

Coba juga untuk mengakses localhost:8000/api/user untuk mendapatkan informasi data user yang sedang login

User with Authorization

Catatan :

Untuk mengakses API dari proyek lain kita perlu untuk mengenable CORS protection menggunakan https://github.com/barryvdh/laravel-cors


Buat CRUD ToDos API

Buat Model + Migrate

php artisan make:model Todo -m

Ubah schema table todos

Schema::create('todos', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->integer('user_id');
    $table->char('title');
    $table->boolean('isCompleted');
    $table->timestamps();
});
php artisan migrate

Edit Model

protected $fillable= ['user_id','title','isCompleted'];

Membuat Routes

Sebelum mengatur method pada controller, kita tambahkan route resource pada routes/api.php

Route::resource('todo', 'TodoController')->middleware('jwt.verify');

Buat Controller CRUD

php artisan make:controller TodoController --resource

app/Http/Controllers/TodoController.php

<?php

namespace App\Http\Controllers;

use App\Todo;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;

class TodoController extends Controller
{
    public function index()
    {
        try {
            if (! $user = JWTAuth::parseToken()->authenticate()) {
                return response()->json(['user_not_found'], 404);
            }
        } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
            return response()->json(['token_expired'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
            return response()->json(['token_invalid'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
            return response()->json(['token_absent'], $e->getStatusCode());
        }
        $data=Todo::all();
        return response()->json($data);
    }

    public function create()
    {
        //
    }

    public function store(Request $request)
    {
        try {
            if (! $user = JWTAuth::parseToken()->authenticate()) {
                return response()->json(['user_not_found'], 404);
            }
        } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
            return response()->json(['token_expired'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
            return response()->json(['token_invalid'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
            return response()->json(['token_absent'], $e->getStatusCode());
        }
        
        $this->validate($request,[
            'user_id' => 'required',
            'title' => 'required',
        ]);
  
        Todo::create([
            'user_id' => $request->user_id,
            'title' => $request->title,
            'isCompleted' => 0
        ]);
        
        return response()->json(array('message'=>'Input Success'));
    }

    public function show($id)
    {
        //
    }

    public function edit($id)
    {
        //
    }

    public function update(Request $request, $id)
    {
        try {
            if (! $user = JWTAuth::parseToken()->authenticate()) {
                return response()->json(['user_not_found'], 404);
            }
        } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
            return response()->json(['token_expired'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
            return response()->json(['token_invalid'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
            return response()->json(['token_absent'], $e->getStatusCode());
        }
        
        $this->validate($request,[
            'user_id' => 'required',
            'title' => 'required',
        ]);
        
        $row=Todo::find($id);
        $row->user_id = $request->user_id;
        $row->title = $request->title;
        $row->isCompleted = $request->isCompleted==1?1:0;
        $row->save();
        
        return response()->json(array('message'=>'Update Success'));
    }

    public function destroy($id)
    {
        try {
            if (! $user = JWTAuth::parseToken()->authenticate()) {
                return response()->json(['user_not_found'], 404);
            }
        } catch (Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
            return response()->json(['token_expired'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
            return response()->json(['token_invalid'], $e->getStatusCode());
        } catch (Tymon\JWTAuth\Exceptions\JWTException $e) {
            return response()->json(['token_absent'], $e->getStatusCode());
        }
        
        $row=Todo::find($id);
        $row->delete();
        
        return response()->json(array('message'=>'Delete Success'));
    }
}

Sumber :

  1. https://medium.com/@newrey9227/belajar-autentikasi-api-di-laravel-menggunakan-jwt-c8c52d82e9d4

#37-Laravel Multi Bahasa Localization

Tujuan

Multi bahasa merupakan fitur pada website untuk menampilkan informasi dalam berbagai bahasa. Laravel telah menyediakan fitur multi bahasa sehingga untuk membuat fitur multi bahasa dengan laravel menjadi sangat mudah.

Persiapan

  1. Installasi Project Laravel

Membuat Kamus Library

Mempersiapkan semacam library atau kamus dalam folder resources/lang. Bahasanya kita pisah-pisahkan ke dalam folder masing-masing. kita akan membuat 2 buah folder dalam resources/lang. yaitu :

  • en
  • id

Pengaturan bahasa inggris akan kita simpan dalam folder en, sementara untuk bahasa indonesia kita simpan dalam folder id.

Buat file biodata.php dalam folder id dan buat juga file biodata.php dalam folder en, mari kita mulai:

resources/lang/id/biodata.php

<?php
return [
	'welcome' => 'Selamat datang di website kami.',
	"title" => "Silahkan isi formulir berikut dengan benar.",
	"profil" => [
		"name" => "Nama Lengkap Anda",
		"address" => "Alamat Anda",
		"hobby" => "Hobi Anda",
		"job" => "Pekerjaan Anda",
	],
	"button" => "Simpan",
	"thank" => "Terima kasih atas kontribusi anda.",
];

resources/lang/en/biodata.php

<?php
return [
	'welcome' => 'Welcome to our website.',
	"title" => "Please fill form below correctly.",
	"profil" => [
		"name" => "Your Name",
		"address" => "Your Address",
		"hobby" => "Your Hobby",
		"job" => "Your Job",
	],
	"button" => "Save",
	"thank" => "Thank you for your contribution.",
];

Pengaturan multi language/multi dibuat dalam bentuk array. array yang kita buat adalah array yang memiliki key dan value

Pengaturan bahasa ini bisa kita panggil nantinya dengan

//cara pertama
@lang("nama_file_bahasa/key_array_nya")

//cara kedua
{{ __("nama_file_bahasa/key_array_nya") }}

Sekarang kita lanjutkan dengan membuat tampilan programnya.

Menyiapkan Routes

routes/web.php

// localization default
Route::get('/form', function () {
    return view('biodata');
});

Menyiapkan View

resources/views/biodata.blade.php

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="csrf-token" content="{{ csrf_token() }}">
        <title>{{$title}}</title>
        <link rel="stylesheet" type="text/css" href="{{ asset('/css/app.css') }}">
    </head>
    <body>
      <div id="app">
        <main class="py-4">
            <div class="container">
                <div class="card mt-5">
                    <div class="card-header text-center">
                        @lang('biodata.welcome')
                    </div>
                    <div class="card-body">
                        <form>
                            <div>
                                <label>@lang('biodata.profil.name')</label>
                                <input type="text" name="">
                            </div>
                            <div>
                                <label>@lang('biodata.profil.address')</label>
                                <input type="text" name="">
                            </div>                
                            <div>
                                <label>@lang('biodata.profil.hobby')</label>
                                <input type="text" name="">
                            </div>                
                            <div>
                                <label>@lang('biodata.profil.job')</label>
                                <input type="text" name="">
                            </div>                
                            <div>
                                <button>@lang('biodata.button')</button>
                            </div>
                        </form>
                        <p>@lang('biodata.thank')</p>
                    </div>
                </div>
            </div>
        </main>
        <footer class="container-fluid">
            <p>© <a href="https://ombagoes.com">ombagoes.com</a>. 2019 - 2020</p>
        </footer>
      </div>
    </body>
    <script src="{{ asset('js/app.js') }}"></script>
</html>

Jalankan Program

Jalankan project laravel kita menggunakan php artisan server, lalu buka web browser http://localhost:8000/form

Form En

Perhatikan pada gambar di atas. yang tampil adalah formulir dalam bahasa inggris. kenapa bahasa inggris ? karena kita belum menentukan bahasa apa yang akan kita gunakan. sehingg secara default laravel akan menggunakan bahasa inggris.

Mengatur Bahasa Default Localization Laravel

Untuk mengatur bahasa defaultnya, pengaturannya ada di config/app.php. buka dan cari pengaturan ‘locale’ => ‘en’, ubah menjadi id

'locale' => 'id',

Maka sekarang bahasa defaultnya adalah bahasa indonesia id

Buka kembali web browser http://localhost:8000/form

Form Id

Jika belum berubah jalankan perintah berikut :

php artisan config:clear

Multi Bahasa Localization Laravel Dengan URL

Tapi bagaimana caranya jika kita ingin memilih bahasanya secara otomatis. kita bisa membuatnya dengan fungsi setLocale() melalui url.

Jadi jika diakses http://localhost:8000/id/form atau http://localhost:8000/en/form

Buka kembali routes/web.php

// localization pilih bahasa
Route::get('/{locale}/form', function ($locale) {
    App::setLocale($locale);
    return view('biodata');
});

Coba kembali buka http://localhost:8000/en/form dan http://localhost:8000/id/form

#36-Laravel Upload Import Data Excel

Tujuan

Seperti penggunaan Export Excel, pada umumnya saat ingin memulai pembuatan aplikasi, pengguna memiliki data yang cukup banyak sehingga akan memakan waktu jika diinput satu per satu melalui aplikasi.

Untuk mempersingkat waktu biasanya developer aplikasi menyediakan fitur Upload Data salah satunya menggunakan Excel.

Pada tutorial sebelumnya kita sudah bisa mengexport data ke Excel, sekarang kita akan membuat fitur File Upload Excel untuk memasukan data ke dalam database menggunakan library Laravel Excel.

Persiapan

  1. Installasi Project Laravel
  2. Konfigurasi Aplikasi & Database
  3. Install Library Laravel Export Laporan Excel

Untuk membuat model menggunakan php artisan, silahkan buka terminal atau cmd, kemudian masuk ke direktori project laravelnya, dan ketik perintah berikut.

php artisan make:model Student -m

-m adalah option perintah untuk sekaligus membuatkan file migration untuk table/model student.

app/Student.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{
    protected $fillable = ['fullname','address'];
}

Persiapan Migrate Database Table Students

Ubah file database/migrations/xxx_create_students_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateStudentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('students', function (Blueprint $table) {
            $table->increments('id');
            $table->string('fullname');
            $table->text('address');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('students');
    }
}

Jalankan Migrate Database Table Students

Untuk membuat table students jalankan perintah berikut:

php artisan migrate

Seharusnya sudah ada table students di database anda, jika ada kendala baca kembali tutorial Laravel Migration

Membuat Class Import Dalam Format Excel Dengan Laravel

Untuk membuat import excel laravel dengan package laravel excel ini, yang harus kita lakukan adalah membuat import nya terlebih dulu. sama pada saat seperti kita membuat export pada tutorial export excel sebelumnya.

buka terminal atau command line nya.

php artisan make:import StudentImport --model=Student

Di sini, import yang akan kita buat kita beri nama StudentImport.php dan model yang kita gunakan adalah model Student.php

Pada saat kita jalankan perintah di atas, laravel akan membuatkan file SiswaImport.php dalam folder app/Imports

Buka file StudentImport.php tersebut.

app/Imports/StudentImport.php

<?php

namespace App\Imports;

use App\Student;
use Maatwebsite\Excel\Concerns\ToModel;

class StudentImport implements ToModel
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new Student([
            'fullname' => $row[1],
            'address' => $row[2], 
        ]);
    }
}

Di sini kita atur urutan data yang akan kita import dengan urutan kolum yang ada pada table siswa.

Di sini kita atur urutan data yang akan kita import dengan urutan kolum yang ada pada table siswa.

Index Kolom

Jadi untuk kolum fullname kita isi dengan kolom 0, kolum address kita isi dengan kolom 1.

Nantinya untuk proses import data excelnya, kita akan membuat sebuah tombol “IMPORT EXCEL”, dimana pada saat tombol tersebut diklik, kita akan memunculkan modal pop up. pada modal tersebut kita buatkan form input file excel.

Kemudian pada saat disubmit, maka data siswa yang ada dalam file excel tersebut semua kita simpan ke database. lebih tepatnya ke table siswa.

Buka file view student.blade.php yang sudah kita buat sebelumnya. karena kita akan menambahkan sebuah tombol untuk upload/import file excel.

resources/views/student.blade.php

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="csrf-token" content="{{ csrf_token() }}">
        <title>{{$title}}</title>
        <link rel="stylesheet" type="text/css" href="{{ asset('/css/app.css') }}">
    </head>
    <body>
      <div id="app">
        <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
            <a class="navbar-brand" href="#">Navbar</a>
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
              <span class="navbar-toggler-icon"></span>
            </button>
        </nav>
        <main class="py-4">
            <div class="container">
                <div class="card mt-5">
                    <div class="card-header text-center">
                        {{$title}}
                    </div>
                    <div class="card-body">
                        <button type="button" class="btn btn-primary m-2" data-toggle="modal" data-target="#importExcel">
                            IMPORT EXCEL
                        </button>
                        <table class="table table-bordered table-hover table-striped">
                            <thead>
                                <tr>
                                    <th>Nama</th>
                                    <th>Alamat</th>
                                </tr>
                            </thead>
                            <tbody>
                                @foreach($list as $row)
                                <tr>
                                    <td>{{ $row->fullname }}</td>
                                    <td>{{ $row->address }}</td>
                                </tr>
                                @endforeach
                            </tbody>
                        </table>
                        <br/>
                        Halaman : {{ $list->currentPage() }} <br/>
                        Jumlah Data : {{ $list->total() }} <br/>
                        Data Per Halaman : {{ $list->perPage() }} <br/>
                    
                    
                        {{ $list->links() }}
                    </div>
                </div>
                <!-- Import Excel -->
                <div class="modal fade" id="importExcel" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
                    <div class="modal-dialog" role="document">
                        <form method="post" action="/student/import_excel" enctype="multipart/form-data">
                            <div class="modal-content">
                                <div class="modal-header">
                                    <h5 class="modal-title" id="exampleModalLabel">Import Excel</h5>
                                </div>
                                <div class="modal-body">

                                    {{ csrf_field() }}

                                    <label>Pilih file excel</label>
                                    <div class="form-group">
                                        <input type="file" name="file" required="required">
                                    </div>

                                </div>
                                <div class="modal-footer">
                                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                                    <button type="submit" class="btn btn-primary">Import</button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </main>
        <footer class="container-fluid">
            <p>&copy; <a href="https://ombagoes.com">ombagoes.com</a>. 2019 - 2020</p>
        </footer>
      </div>
    </body>
    <script src="{{ asset('js/app.js') }}"></script>
</html>

Route

Tambahkan route berikut

Route::post('/student', 'StudentController@index');
Route::post('/student/import_excel', 'StudentController@doimport');

Controller

Buat Controller StudentController

php artisan make:controller StudentController

app/Http/Controllers/StudentController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Student;

use App\Imports\StudentImport;
use Maatwebsite\Excel\Facades\Excel;

class StudentController extends Controller
{
    public function index()
    {
        return view('student', ['title'=>'Students','list'=>Student::paginate(5)]);
    }
    public function import_excel(Request $request) 
	{
		$this->validate($request, [
			'file' => 'required|mimes:csv,xls,xlsx'
		]);
		$file = $request->file('file');
		$nama_file = rand().$file->getClientOriginalName();
		$file->move('file_student',$nama_file);
		Excel::import(new StudentImport, public_path('/file_student/'.$nama_file));
		return redirect('/student')->with('message','Data Siswa Berhasil Diimport!');
	}
}

Test Running

Jalankan project laravel kita menggunakan php artisan server, lalu buka web browser http://localhost:8000/student

Student
Form Upload
Setelah Upload

#35-Laravel Export Laporan Excel

Tujuan

Dalam membuat sebuah aplikasi tentunya anda akan sering menemukan permintaan untuk membuat fitur export data dalam format excel dengan tujuan hanya sekedar laporan atau kebutuhan lain.

Laravel Excel adalah salah satu package yang sering digunakan untuk membantu proses pembuatan laporan dalam format excel pada framework laravel, jika anda sedang mencari referensi tentang cara membuat export data dalam format excel maka anda sedang berada pada postingan yang tepat karna pada tutorial ini anda akan belajar bagaimana membuat fitur export data kedalam format excel dengan package laravel excel dan framework laravel.

Persiapan

  1. Installasi Project Laravel
  2. Konfigurasi Aplikasi & Database
  3. Membuat Login & Register (Hanya untuk mengambil table users)

Installasi Dan Konfigurasi Laravel Excel

Sekarang kita akan lanjutkan dengan melakukan instalasi package untuk membuat laporan excel pada framework laravel, nama package tersebut adalah Laravel Excel . kita akan melakukan instalasi package ini menggunakan composer dengan cara :

composer require maatwebsite/excel

Kemudian kita lanjutkan proses untuk mendaftarkan package tersebut agar bisa digunakan, silahkan buka app.php yang ada dalam folder config dan tambahkan script berikut ini pada block provider :

'providers' => [
    /*
     * Package Service Providers...
     */
    Maatwebsite\Excel\ExcelServiceProvider::class,
],
'aliases' => [
    ...
    'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]

sampai tahap ini proses konfigurasi sudah selesai, langkah selanjutnya kita akan membuat script untuk export data dalam format file excel.

Membuat Script Export Dalam Format Excel Dengan Laravel

Pada Persiapan Poin 3, kita sudah memiliki database table users, yang nantinya datanya akan kita Export.

Lalu kita akan menggunakan perintah make:export  untuk membuat sebuah file Class Export. file ini nantinya akan kita gunakan sebagai tempat menulis logika dari laporan excel yang akan kita buat, pada kasus ini kita akan membuat laporan excel dari tabel users dan menggunakan model User yang sudah tersedia ketika anda melakukan instalasi proyek laravel.

Untuk membuat Class Export tersebut silahkan jalankan perintah berikut :

php artisan make:export UserExport --model=User

Perintah diatas akan membuat sebuah file baru dengan nama UsersExport.php pada folder app\Exports. folder Exports bisa anda buat secara manual atau jika folder tersebut belum ada tetapi anda menjalankan perintah export maka laravel akan membuat folder Exports secara otomatis.

<?php

namespace App\Exports;

use App\User;
use Maatwebsite\Excel\Concerns\FromCollection;

class UsersExport implements FromCollection
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return User::all();
    }
}

Diatas merupakan script dari file UsersExport.php yang digenerate tadi, seperti yang anda lihat bahwa disini kita menggunakan model User ( Line 5 ) dan mereturn semua data dari model user ( Line 15 ).

Membuat Routing Dan Controller

Selanjutnya kita akan menambahkan sebuah routing baru, silahkan buka file web.php yang ada didalam folder routes dan tambahkan script berikut :

Route::get('testexcel','TestExcelController@doexport');

Kemudian selanjutnya kita akan membuat sebuah controller baru dengan nama TestExcelController.php dengan perintah artisan, jadi sekarang silahkan jalankan perintah tersebut :

php artisan make:controller TestExcelController

Jika sudah berhasil membuat file controller nya, maka sekarang kita akan membuat sebuah function export yang akan memproses aktifitas pembuatan laporan excel nantinya, silahkan tulis script berikut pada file ExportLaravelController.php yang terdapat didalam folder app\Http.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;

class TestExcelController extends Controller
{
    function doexport()
    {
        return Excel::download(new UsersExport, 'users.xlsx');
    }
}

Uji coba Fitur Export Laporan Dalam Format Excel

Semua tahapan sudah kita lakukan, sekarang waktunya untuk melakukan testing dengan cara mengakses url http://localhost:8000/export-laravel pada web browser yang anda gunakan. jika semua tahapan yang anda lakukan sudah benar maka seharusnya muncul notifikasi download file excel dengan nama users.xls sepeti dibawah ini :

users.xlsx

#34-Laravel Membuat PDF dengan DOMPDF

Penjelasan DOMPDF

DOMPDF adalah library PHP yang bisa digunakan untuk membuat laporan PDF dengan PHP. DOMPDF bekerja dengan cara mengubah halaman menjadi file PDF.

Pada tutorial kali ini kita akan belajar bagaimana membuat laporan PDF menggunakan dompdf pada framework laravel.

Persiapan

  1. Installasi Project Laravel

Installasi laravel-dompdf Package

Laravel-dompdf adalah package yang digunakan untuk membuat laporan pdf dari sebuah halaman HTML pada framework laravel, untuk bisa menggunakan nya tentu kita harus melakukan instalasi terlebih dahulu dengan menggunakan composer, silahkan buka terminal anda dan ketik :

composer require barryvdh/laravel-dompdf
Installing DOMPDF

Setelah proses instalasi selesai maka tahap selanjutnya adalah konfigurasi. silahkan buka config/app.php untuk menambahkan package ini agar dikenali oleh sistem laravel lalu tambahkan 2 baris dibawah ini pada block provider dan alias seperti dibawah ini :

'providers' => [
	....
	Barryvdh\DomPDF\ServiceProvider::class,
],
'aliases' => [
	....
	'PDF' => Barryvdh\DomPDF\Facade::class,
]

Membuat Routing Dan Controller

Agar halaman pdf nya nanti bisa diakses oleh visitor, maka kita harus membuat sebuah routing baru pada file routes/web.php dan tambahkan script berikut ini :

Route::get('testpdf','TestPdfController@dogenerate');

Script diatas menjelaskan ketika visitor menunjungi url testpdf maka laravel akan memanggil method generatePDF yang ada pada controller TestPdfController.php, jadi silahkan buat sebuah controller baru dengan nama TestPdfController dan tambahkan script berikut :

php artisan make:controller TestPdfController

app/Http/Controllers/TestPdfController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use PDF;
class TestPdfController extends Controller
{
    public function dogenerate()
    {
        $data = ['title' => 'Welcome to ombagoes.com'];
 
        $pdf = PDF::loadView('testpdf', $data);
        return $pdf->download('testpdf.pdf');
    }
}

Membuat Halaman HTML Dengan Blade

Langkah terakhir adalah mempersiapkan dokumen HTML, karna kita menggunakan laravel maka kita akan membuat sebuah halaman HTML dengan blade, silahkan buat sebuah file view baru dengan nama testpdf.blade.php dan tulislah script berikut ini :

<!DOCTYPE html>
<html>
<head>
	<title>Hi</title>
</head>
<body>
	<h1>{{ $title }}</h1>
	<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
	tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
	quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
	consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
	cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
	proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>

</body>
</html>

Kemudian jika semua sudah selesai, maka silahkan jalankan php artisan serve pada terminal dan buka web browser anda untuk mengakses url http://localhost:8000/testpdf. jika semua tahapan yang anda lakukan benar maka sharusnya browser akan mengdownload sebuah file PDF seperti ini :

testpdf.pdf

Atau jika anda ingin agar laporan PDF nya ditampilkan pada web browser maka silahkan ganti script :

//return $pdf->download('testpdf.pdf');
//menjadi
return $pdf->stream();
Stream PDF

#33-Laravel – Verifikasi Email User Laravel

Tujuan

Pada umumnya kita membuat verifikasi email setelah pengguna melakukan Registrasi, pengguna akan mendapatkan email dari pengembang yang berisi link aktivasi, setelah link aplikasi di klik baru email tersebut dapat digunakan untuk login.

Persiapan

  1. Installasi Project Laravel
  2. Konfigurasi Aplikasi & Database
  3. Buat Auth Login Register Laravel
  4. Register Mailtrap

Penerapan

Setelah persiapan dilakukan kita akan mulai membuat penerapan verifikasi email.

Manambahkan implement Mustverify pada Model User

Buka file /app/User.php, lalu tambahkan implements MustVerifyEmail pada class User Model:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

Kemudian tambahkan baris berikut pada routes/web.php dibawah baris Auth::routes();

Auth::routes(['verify' => true]);

Selanjutnya kita akan memproteksi controller HomeController.php. agar user tidak bisa mengaksesnya sebelum melakukan verifikasi alamat emailnya.

Untuk memproteksi, teman-teman bisa menggunakan middleware verified pada route atau controller yang ingin diproteksi dari user yang belum melakukan verifikasi email.

Buka controller HomeController.php. tambahkan middleware verified pada method __construct di controller ini.

$this->middleware(['auth','verified']);

kita akan menerapkan middleware verified pada controller ini, sehingga controller ini hanya bisa diakses oleh user yang sudah melakukan verifikasi email.

app/Http/Controllers/HomeController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware(['auth','verified']);
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('home');
    }
}

Sekarang kita coba lihat hasilnya.

Jalankan Service php artisan serve, kemudian akses halaman register atau halaman daftar usernya http://localhost:8000/register

Register

Buka akun Mailtrap.io anda lalu masuk ke halaman Inbox

Verifikasi Email

Setelah diverifikasi barulah user dapat masul ke halaman Home

Selesai… Selamat mencoba.

#32-Laravel Kirim Email

Mailtrap.io

Sebenarnya segala sesuatunya sudah dipersiapkan dengan lengkap oleh laravel, hanya saja sistem kita belum bisa mengirimkan email konfirmasi reset password secara otomatis ke client/user. karena kita belum menghubungkan project kita dengan mail service.

Untuk itu kita perlu SMTP server. SMTP adalah singkatan dari Simple Mail Transfer Protocol. SMTP digunakan untuk mengirim komunikasi ke server. untuk mengirimkan email ke penerima.

Untuk percobaan, kita bisa menggunakan Mailtrap.io secara gratis.

Mailtrap adalah fake SMTP server untuk percobaan. kita bisa menggunakan mailtrap untuk membuat simulasi percobaan pengiriman dan penerimaan email pada saat proses pengembangan aplikasi atau website. sebelum akhirnya aplikasi atau website kita benar-benar di publis.

Bagaimana cara menggunakan mailtrap? simak penjelasan berikut.

Mendaftar Di Mailtrap.io

Untuk menggunakan mailtrap, silahkan teman-teman mendaftar di situs resminya. yaitu https://mailtrap.io/.

setelah teregister masuk page inbox lalu kita akan mendapatkan info smtp setting sbb :

Mailtrap

Nah, username dan password inilah yang akan kita masukkan ke project laravel kita untuk menghubungkan project laravel dengan mailtrap.

Buka file .env. dan isikan username dan password SMTP yang teman-teman dapatkan dari mailtrap.

Konfigurasi SMTP in .env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=sesuaikan
MAIL_PASSWORD=sesuaikan
MAIL_ENCRYPTION=null

Membuat Route & Blade View

Route::get('/testemail/send', 'TestEmailController@sendEMail');

Next, we need to create email blade view file in views folder of view. Go to the resources/views/ and create a view file name mailtemp1.blade.php. Put bellow code:

<h3>Halo, {{ $nama }} !</h3>
<p>{{ $website }}</p>

<p>Selamat datang di <a href="https://ombagoes.com">omabgoes.com</a></p>

Membuat Controller & Method

We need to create new controller EmailController that will manage one method. lets use this below command and create Controller.

Kita perlu membuat controller baru TestEmailController yang memiliki method untuk mengirim email. Kita buat controller menggunakan php artisan.

php artisan make:controller TestEmailController

app/Http/Controllers/TestEmailController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Mail\MailTemp1;
use Illuminate\Support\Facades\Mail;

class TestEmailController extends Controller
{
    public function send(){
        Mail::to("s.bagoes@gmail.com")->send(new MailTemp1());
 
		return "Email telah dikirim";
    }
}

Membuat Class Mailable

php artisan make:mail MailTemp1

app/Http/Controllers/Mail/MailTemp1.php

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class MailTemp1 extends Mailable
{
    use Queueable, SerializesModels;
    public function __construct()
    {
        
    }

    public function build()
    {
       return $this->from('s.bagoes@ombagoes.com')
                   ->view('mailtemp1')
                   ->with(
                    [
                        'nama' => 'Om Bagoes',
                        'website' => 'ombagoes.com',
                    ]);
    }
}

Jalankan

Jalankan php artisan serve, lalu buka http://locahost:8000/testemail/send

#31-Laravel Error Handling

Laravel sudah menyediakan fitur atau konfigurasi yang bisa kita lakukan untuk menangani segala jenis error. dan penanganan error pada laravel ini akan kita bahas pengertian dan cara-caranya pada tutorial ini.

Pada saat kita sedang mengerjakan sebuah project aplikasi pada masa development, jika ada kesalahan code atau error yang terjadi, tentu kita ingin error yang terjadi tersebut terlihat, sehingga dengan melihat pesan error tersebut kita bisa mengetahui pada bagian mana saja yang terdapat error dan kita bisa dengan mudah menemukan bug tersebut dan memperbaikinya.

Tapi, pada saat proyek aplikasi kita sudah di deploy dan sudah online, alangkah lebih baiknya error tersebut tidak terlihat pada bagian front-end. karena pasti kita tidak ingin ada error yang terlihat ke pengguna pada saat pengguna menggunakan aplikasi yang kita buat.

Setting Error dan Logging Laravel

Laravel sudah menyediakan konfigurasi ini. konfigurasi untuk menyembunyikan dan menampilkan error. konfigurasi error pada laravel ada pada file .env.

Cari bagian APP_DEBUG, dan atur dengan true atau false. Secara default pengaturannya adalah true, sehingga error yang terjadi bisa terlihat.

APP_DEBUG=true

Saat project sudah di publish baiknya adalah mengubah setting APP_DEBUG=false supaya pengguna tidak dapat melihat error.

Nah bukan berarti kita sebagai developer tidak dapat melihat error tersebut. Kita dapat melihat error log melalui file storage/logs.

Folder tersebut berisi error log yang dipisah berdasarkan tanggal, sehingga mudah untuk kita analisa.

Simulasi

Sekarang kita akan membuat simulasi penerapannya diawali dengan mengubah setting APP_DEBUG=false pada file .env

Buat Routes

routes/web.php

Route::get('/testerror','TestErrorController@index');
Route::get('/testerror/errorno/{no}','TestErrorController@errorno');

Buat Controller

php artisan make:controller TestErrorController

app/Http/Controllers/TestErrorController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestErrorController extends Controller
{
    public function index()
    {
        return $helloworld;
    }
    public function errorno($no){
        if($no==403){
            return abort(403,'Anda tidak punya akses');
        }else{
            return abort(500);
        }

    }
}

Perhatikan baris “return $helloworld;” . Seharusnya jika dibuka pada saat APP_DEBUG=true, maka tampilannya akan berisi error debug

Namun karena APP_DEBUG=false, maka tampilannya akan seperti simulasi di bawah ini :

Jalankan service php artisan serve, lalu buka web browser http://localhost:8000/testerror

Penting!!! Jika masih tampil error debug, lakukan perintah artisan sbb:

php artisan config:cache

Untuk melihat error nya pada log, silahkan teman-teman buka folder storage/logs. lihat file log dengan format tanggal hari ini.

Mengubah Tampilan View

php artisan vendor:publish --tag=laravel-errors

Akan ada folder errors pada direktori resources/views

Mengani Handler

Yang pertama perlu dilakukan adalah mengubah isi dari file Handler.php. File ini terletak pada direktori app/Exceptions. Ubah method berikut:

public function render($request, Exception $exception)
{
    if($this->isHttpException($exception)){
        switch ($exception->getStatusCode()) {
            case 404:
                return response()->view('errors.404', [], $exception->getStatusCode());
                break;
            case 405:
                return response()->view('errors.405', [], $exception->getStatusCode());
                break;
        }
    }        
    return parent::render($request, $exception);
}

Ubahlah kode pada public function render di dalam file Handler.php sesuai dengan kode di atas. Pada kode di atas saya hanya memberikan contoh error kode 404 dan 405 saja, anda bisa menambahkan error yang lainnya sesuai dengan kebutuhan program anda. Dan pada bagian return nya saya memberikan 2 contoh return yaitu return redirect yang akan melempar error ke route 404 (untuk cara ini kita perlu mendefinisikan route 404 pada routes.php terlebih dahulu) dan yang kedua yaitu return view

#30-Laravel Notifikasi Dengan Flash Message Session

Flash message biasanya digunakan pada sebuah aplikasi untuk memberikan feedback berupa informasi success, error, warning, dll. Pada tutorial kali ini saya akan menunjukkan bagaimana cara membuat flash messageredirect seperti: success message, error message, warning message dan info message. Dalam menangani layout yang akan ditampilkan kita akan menggunakan bootstrap flash alert.

Persiapan

Memulai langkah yang akan dilakukan, saya berasumsi anda telah memiliki Laravel fresh install atau jika anda telah memahami kerangka kerja menggunakan Laravel, maka anda dapat menerapkannya langsung pada project anda. Untuk membuat flash message, buat file blade dengan nama pesan.blade.php. Pada file ini kita akan menggunakan bootstrap alert dan mengecek jika terdapat sebuah pesan yang dikirimkan dari controller.

Membuat Controller

php artisan make:controller FlashMessageController

FlashMessageController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class FlashMessageController extends Controller
{
    public function index(Request $request)
    {
        return view('flashmessage',
            ['title'=>'Flash Message']
        );
    }
    public function store(Request $request){
        return redirect('/flashmessage')->with('message','Isi flash message');
    }
}

Tambahkan Routes

routes/web.php

Route::get('/flashmessage','FlashMessageController@index');
Route::get('/flashmessage/store','FlashMessageController@store');

Buat Views

flashmessage.blade.php

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>{{$title}}</title>
        <link rel="stylesheet" type="text/css" href="{{ asset('/css/app.css') }}">
    </head>
    <body>
        <div class="container">
            <div class="card mt-5">
                <div class="card-header text-center">
                    {{$title}}
                </div>
                <div class="card-body">
                    @if ($message = Session::get('message'))
                        <div class="alert alert-success">
                            <p>{{ $message }}</p>
                        </div>
                    @endif
                    <br/>
                    <br/>
                </div>
            </div>
        </div>
    </body>
</html>

Simulasi

Jalankan service php artisan serve, buka web browser http://localhost:8000/flashmessage, lalu klik tombol Flash Message

#29-Laravel Session

Laravel sudah menyediakan fungsi-fungsi default untuk melakukan manipulasi session. Session yang digunakan laravel berbeda dengan session pada PHP pada umunya. Jadi jika anda menggunakan fungsi-fungsi session pada laravel, session tersebut tidak dapat terbaca pada variabel $_SESSION dan begitu pula sebaliknya. Pada artikel kali ini saya akan menjelaskan cara penggunaan session pada laravel ini.

#KONFIGURASI

Konfigurasi dari session pada laravel terdapat di dalam file config/session.php. Di dalam file tersebut, terdapat variabel-variabel konfigurasi di mana sebagian besar dari variabel tersebut dapat diatur dengan menggunakan file .env. Anda cukup menginisialisasi variabel konfigurasi session pada file .env. Misalnya anda ingin melakukan konfigurasi driver session yang digunakan, anda cukup menambahkan variabel SESSION_DRIVER pada file .env seperti contoh di bawah ini.
SESSION_DRIVER = database

Jadi program akan menggunakan driver database sesuai nilai yang terdapat pada file .env tersebut.

Konfigurasi driver session pada laravel ini adalah sebagai berikut :

  • file – session disimpan pada direktori storage/framework/sessions
  • cookie – session disimpan pada cookie
  • database – session disimpan dalam database
  • memcached / redis – session disimpan dengan menggunakan memcached atau redis
  • array – session disimpan pada array PHP dan session ini tidak akan bertahan

Jika anda menggunakan driver database maka anda perlu membuat terlebih dahulu table sessions untuk menyimpannya. Schema dari tabel tersebut adalah sebagai berikut :

Schema::create('sessions', function ($table) {
    $table->string('id')->unique();
    $table->unsignedInteger('user_id')->nullable();
    $table->string('ip_address', 45)->nullable();
    $table->text('user_agent')->nullable();
    $table->text('payload');
    $table->integer('last_activity');
});

Anda dapat menggunakan perintah artisan berikut untuk membuat tabel tersebut:

php artisan session:table
php artisan migrate

#CARA PENGGUNAAN SESSION

Terdapat 2 macam cara untuk melakukan manipulasi data session pada laravel yaitu dengan menggunakan helper global session dan yang kedua adalah dengan menggunakan Request. Untuk menggunakan Request, hanya dapat dilakukan pada file controller. Sedangkan penggunaan helper session dapat dilakukan di view juga.

#BUAT CONTROLLER TestController

Berikut ini kita akan membuat Controller Test Penggunaan Session

php artisan make:controller TestController

app/Http/Controllers/TestController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    public function index(Request $request)
    {
        if($request->session()->has('key')){
			echo $request->session()->get('key');
		}else{
			echo 'Tidak ada data dalam session.';
		}
    }
    public function store(Request $request){
        $request->session()->put('key', 'Om Bagoes');
        echo 'Menyimpan session nama=Om Bagoes';
    }
    public function destroy(Request $request){
        $request->session()->forget('key');
        echo 'Menghapus session name';
    }
}

#MEMBUAT ROUTE UNTUK TestController

Tambahkan Route berikut ke dalam routes/web.php

Route::get('/session','TestController@index');
Route::get('/session/store','TestController@store');
Route::get('/session/destroy','TestController@destroy');

#MENYIMPAN NILAI SESSION

Cara untuk menyimpan nilai pada session melalui Request dapat dilihat pada contoh kode TestController method store(Request $request) 

$request->session()->put('key', 'Om Bagoes');

jika melalui Request sementara jika menggunakan global helper session ganti kodenya dengan

session(['key' => 'Om Bagoes']);

#PENGECEKAN KEBERADAAN KEY SESSION

Laravel juga sudah menyediakan fungsi untuk melakukan pengecekan apakah session dengan key tersebut ada atau tidak. Terdapat 2 macam fungsi pengecekan. Yang pertama adalah dengan menggunakan fungsi has yang akan mengembalikan nilai true jika nilai dari session tersebut ada dan bukan null. Berikut ini adalah contoh penggunaannya :

if ($request->session()->has('key')) {
    //
}

Yang kedua adalah dengan menggunakan fungsi exists yang akan mengembalikan nilai true jika  nilai dari session dengan key yang dicari ada walaupun nilainya adalah null. Contoh penggunaannya adalah sebagai berikut :

if ($request->session()->exists('key')) {
    //
}

#MENDAPATKAN NILAI SESSION

Cara untuk mendapatkan data session melalui Request dapat dilihat pada contoh kode TestController method index(Request $request)

$request->session()->get('key', 'default');

Namun jika melalui Request sementara jika menggunakan global helper session ganti kodenya dengan

session('key', 'default');

#MENGHAPUS SESSION

Cara untuk mendapatkan data session melalui Request dapat dilihat pada contoh kode TestController method destroy(Request $request)

$request->session()->forget('key');
$request->session()->flush();

Jika melalui Request sementara jika menggunakan global helper session ganti kodenya dengan

session()->forget('key');
session()->flush();

#SIMULASI

Buka halaman di bawah ini satu per satu, jangan lupa menjalankan php artisan serve jika service belum dinyalakan.