Laravel Introduction

Laravel adalah salah satu framework PHP paling populer dan kuat karena kemudahan penggunaannya serta fitur-fitur canggih yang ditawarkannya, seperti routing, ORM (Eloquent), autentikasi, dan banyak lagi.

1. Persiapkan Lingkungan Pengembangan

Sebelum mulai menggunakan Laravel, kita perlu memastikan bahwa lingkungan pengembanganmu sudah siap. Berikut adalah beberapa hal yang perlu dipersiapkan:

  • PHP (Laravel membutuhkan PHP versi 7.3 atau yang lebih baru).
  • Composer: Manajer dependensi PHP yang digunakan untuk menginstal Laravel dan dependensinya.
  • Database: Laravel mendukung berbagai database seperti MySQL, PostgreSQL, SQLite, dan SQL Server.
  • Text Editor atau IDE: Seperti Visual Studio Code, PHPStorm, atau Sublime Text.

2. Instalasi Laravel

Setelah memastikan lingkungan pengembangan siap, kita bisa mulai dengan menginstal Laravel.

Berikut adalah cara menginstalnya melalui Composer:

  • Buka terminal (Command Prompt atau terminal di macOS/Linux).
  • Jalankan perintah berikut untuk menginstal Laravel
  • composer global require laravel/installer
  • Setelah itu, kita bisa membuat proyek Laravel baru dengan perintah
  • laravel new nama_project

Atau kita juga bisa menggunakan Composer langsung:

composer create-project --prefer-dist laravel/laravel nama_project

3. Memahami Struktur Folder Laravel

Setelah menginstal Laravel, kita akan melihat struktur folder yang khas. Berikut beberapa folder penting yang perlu kita ketahui:

  • app/: Tempat aplikasi utama Laravel berada, termasuk controllers, models, dan middleware.
  • config/: Menyimpan file konfigurasi untuk berbagai fitur.
  • database/: Tempat migrasi dan seeder database berada.
  • public/: Tempat file yang bisa diakses publik seperti index.php dan file static.
  • routes/: Menyimpan file routing untuk aplikasi kita, seperti web.php dan api.php.
  • resources/: Menyimpan view (Blade templates) dan file assets (CSS, JavaScript, dll).
  • storage/: Menyimpan log, file cache, dan file lainnya.
  • tests/: Tempat kita bisa menulis tes otomatis untuk aplikasi.

Kode sumber bisa di download di github pada link berikut laravel-days

hyvercode

SSO Laravel API + Keycloack

Langkah 1: Instalasi Laravel dan Library Keycloak-Guard

  1. Buat proyek Laravel baru dengan perintah laravel new namaproyek.
  2. Masuk ke direktori proyek dengan perintah cd namaproyek.
  3. Instal library Keycloak-Guard dengan Composer menggunakan perintah composer require laravel/keycloak-guard.

Langkah 2: Konfigurasi Keycloak

  1. Buka file .env dan tambahkan konfigurasi Keycloak berikut ini:
makefile
KEYCLOAK_SERVER_URL=https://alamat-keycloak/auth
KEYCLOAK_REALM=nama-realm
KEYCLOAK_CLIENT_ID=nama-client
KEYCLOAK_CLIENT_SECRET=rahasia-client

Pastikan untuk mengganti nilai-nilai sesuai dengan konfigurasi Keycloak Anda.

  1. Buka file config/auth.php dan ubah driver ke 'keycloak':
arduino
'guards' => [
    'api' => [
        'driver' => 'keycloak',
        'provider' => 'users',
    ],
],
  1. Tambahkan konfigurasi Keycloak ke dalam file config/services.php:
bash
'keycloak' => [
    'base_url' => env('KEYCLOAK_SERVER_URL'),
    'realm' => env('KEYCLOAK_REALM'),
    'client_id' => env('KEYCLOAK_CLIENT_ID'),
    'client_secret' => env('KEYCLOAK_CLIENT_SECRET'),
],

Langkah 3: Migrasi Database dan Routing

  1. Jalankan perintah php artisan migrate untuk membuat tabel pengguna default Laravel.

Langkah 4: Routing dan Implementasi Autentikasi

  1. Buka file routes/api.php dan tambahkan rute berikut ini sebagai contoh:
php
Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::middleware('auth:api')->get('/protected', function () {
    return response()->json([
        'message' => 'This is a protected route.',
    ]);
});

Langkah 5: Uji Autentikasi

  1. Jalankan aplikasi Laravel dengan perintah php artisan serve.
  2. Buka Postman atau alat serupa untuk menguji API.
  3. Buat permintaan GET ke http://localhost:8000/api/user dan atur header Authorization dengan nilai Bearer <access_token>. Gantilah <access_token> dengan token akses yang diterima setelah autentikasi Keycloak.
  4. Anda harus menerima respons JSON yang berisi informasi pengguna terautentikasi.

Dengan langkah-langkah di atas, aplikasi Laravel API Anda harus terhubung dengan Keycloak dan mampu melakukan autentikasi menggunakan Keycloak. Pastikan untuk mengganti nilai-nilai konfigurasi dengan yang sesuai dengan konfigurasi Keycloak Anda.

hyvercode

Lumen HTTP Request

Accessing Request

Untuk mengakses nilai pada sebuah request kita bisa menggunakan Dependency Injection pada sebuah method yaitu dengan melakukan injection class Illuminate\Http\Request pada method yang kita buat. Dependency ini sudah include pada framework lumen sehingga kita bisa menggunakannya dengan cara memanggil use Illuminate\Http\Request.

<?php

namespace App\Services;

use Illuminate\Http\Request;

class UserController
{

    /**
     * @param $name
     * @return mixed
     */
    public function getName(Request $request){
        return 'My Name is :' .$request->name;
    }
}

pada script diatas kita mengambil nilai name dari request baik itu method dengan POST/GET.

Request Param ( Query Parameter)

Request query param adalah request yang biasanya mengunakan method GET yaitu dengan cara mengirim nilai request pada parameter URL seperti http://localhost:8000/randomcode?name=alfazalea&age=90, dimana pada request ini kita mengirimkan sebuah parameter dengan variable name. Request param / query paramater diawali dengan(?) di akhir URL dan menggunakan (&) untuk menambah paramater selanjutnya.

Contoh sederhana bagaimana melakukan request dan mendapatkan nilai pada sebiah request :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ExampleController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    public function index()
    {
        return response(['message' => 'Hello Word'], 200);
    }


    /**
     * @param Request $request
     * @return string
     * @throws \Exception
     */
    public function getRandomCode(Request $request)
    {
        return 'Your name is : ' . $request->name . ' and your code : ' . random_int(100000, 999999);
    }
}

Mapping class controller yang telah kita buat pada route

$router->get('/randomcode','ExampleController@getRandomCode');

Running aplikasi / project dan akses melalui browser dengan menambahkan name pada query param seperti berikut :

Request Path Variable

Sama seperti Request Param, Request Path Variable juga bisa mengirimkan request dengan cara menyisipkan atau menambahkan value yang akan dikirim pada URL. Perbedaanya nilai yang akan kita kirim menjadi sebuah atau bagian dari URL itu sendiri ‘ http://localhost:8000/randomcode/123 ‘, Request Path Variable juga bisa kita gunakan bersamaan dengan Request Param seperti ‘http://localhost:8000/randomcode/123?name=alfazalea&age=90‘, dimana path 123 adalah kode user yang akan kita kirim sedangkan paramater berikutnya adalah query paramater yang akan kita kirim juga.

Contoh sederhana cara membuat Request Path Variable bersamaan dengan Request Param:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ExampleController extends Controller
{
   /**
     * @param Request $request
     * @return string
     * @throws \Exception
     */
    public function getUserById($id,Request $request)
    {
        return 'ID :'.$id.' Your name is : ' . $request->name . ' and your age : ' . $request->age;
    }
}

Mapping class controller yang telah kita buat pada route

$router->get('/userby/{id}','ExampleController@getUserById');

Running aplikasi / project dan akses melalui browser dengan menambahkan name dan age pada query param seperti berikut :

atau kita bisa menggunakan tools seperti Postman https://www.postman.com/downloads/

Request Body/Payload

Request body/payload adalah request yang mengirimkan request pada body/payload, request ini mendukung pengiriman beberapa type data seperti raw,binary,form-data,GrapQL dll.

Kita akan membuat contoh sederhana bagaimana melakukan request dengan mengirimkan type raw berupa JSON :

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ExampleController extends Controller
{
    
    /**
     * @param Request $request
     * @return string
     * @throws \Exception
     */
    public function calculate(Request $request)
    {
        $total = $request->amount * $request->price;
        
        return 'Total amount = '.$total;
    }
    
}

Mapping class controller yang telah kita buat pada route dengan method POST

$router->post('/calculate','ExampleController@calculate');

Running aplikasi / project dan request melalui postman

The lumen tutorial source code can be downloaded at github alfazalea/lumen-tutorial

 

Reference :

  1. https://lumen.laravel.com
  2. https://developer.mozilla.org
  3. https://www.postman.com

 

hyvercode

Lumen HTTP Controllers

Introduction

Controller pada lumen adalah sebuah class yang berfungsi sebagai behavior atau logic yang menghandle setiap request dari routes/web.php yang telah dibuat. Semua class controllers pada framework lumen terletak di directory app/Http/Controllers.

Basic Controllers

Semuah class controllers pada framework lumen adalah extends dari class Controller. Berikut contoh sederhana bagaimana mebuat sebuah class controllers buat sebuah class ExampleController pada directory project app/Http/Controllers. cara install atau menbuat project awal lumen bisa mengikuti tutorial lumen sebelumnya

Lumen Introduction

<?php

namespace App\Http\Controllers;

class ExampleController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    public function index(){
        return "Hello World";
    }
}

Setelah kita membuat class controller maka selanjutnya agar controller yang telah kita buat, tambahkan atau buat route controller pada file app/routes/web.php

$router->get('/example', 'ExampleController@index');

Pada script di atas kita mebuat sebuah route dengan nama /example dan methode GET yang melakukan callback pada class ExampleController dengan nama function index. Setelah itu jalankan aplikasi dan kemudian akses service yang kita buat dengan cara jalankan apliaksi lumen dengan mengetik perintah berikut :

php -S localhost:8000 -t public

 

 

Dependency Injection (DI) & Controllers

Constructor injection

Dependency Injection pada Controller yaitu melakukan injection sebuah Class pada Constructor, sehingga Class atau dependency yang kita inject secara otomatis akan dibuatkan instance ketika Class controller dieksekusi, berikut contoh Dependency Injection pada Controller :

<?php

namespace App\Http\Controllers;

use App\Services\UserService;

class UserController
{

    protected $userService;

    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }

    /**
     * @param $name
     * @return mixed
     */
    public function getMyName($name){
        return $this->userService->getName($name);
    }
}

Pada contoh script di atas kita melakukan injection pada contructor yaitu dengan memasukan class UserService dan memanggil method getName pada body function/method yang kita buat.

 

Method Injection

Selain pada construstor kita juga bisa membuat Dependency Injection pada sebuah method, contoh seperti berikut :

<?php

namespace App\Services;

use http\Client\Request;

class UserService
{

    /**
     * @param $name
     * @return mixed
     */
    public function getName(Request $request){
        return 'My Name is :' .$request->name;
    }
}

Pada contoh script di atas kita melakukan injection pada function/method getName yaitu dengan memasukan class Request dan mengambil nilai $request->name pada body function/method yang kita buat.

 

Source code tutorial lumen bisa di download di github alfazalea/lumen-tutorial

 

References :

  1. https://lumen.laravel.com/

hyvercode

Lumen HTTP Middleware

HTTP Middleware adalah mekanisme yang digunakan untuk filtering HTTP Reguest pada system/aplikasi yang kita buat. contoh Lumen menyediakan middleware untuk melakukan proses authenticated jika user tidak memiliki authentication, maka middleware akan melakukan redirect ke halaman login atau jika aplikasi REST maka system akan memberikan response error.

Defining Middleware

Untuk membuat middleware, pada saat pertama kali kita membuat sebuat project dengan composer maka lumen secara default menyediakan class contoh middleware , kita bisa gunakan ini dengan cara mengkopi terlebih dahulu class contoh tersebut. Contoh class terdapat di directory http/middleware/ExampleMiddleware.php .

class ExampleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if($request->scope =='admin'){
          return redirect('admin');
        }

        return $next($request);
    }
}

Pada contoh class middleware di atas kita melakukan filtering atau validasi jika scope sama dengan admin, maka user akan di arahkan ke halaman admin.

Registering Middleware

Setelah kita membuat class midlleware maka selanjutnya kita harus mendaftarkan class tersebut agar bisa kita gunakan ada beberapa cara agar middleware yang telah kita buat bisa kita gunakan :

Global Middleware

Jika middleware yang kita buat bisa berjalan atau digunakan pada saat semua request, maka kita bisa mendaftarkan class middleware pada file app.ph yang terletak di directory bootstrap/app.php :

$app->middleware([
    App\Http\Middleware\ExampleMiddleware::class
]);

Assigning Middleware To Routes

Selain secara global kita juga bisa meletakan middleware pada setiap route yang kita buat ini lebih spesifik sesuai dengan yang kita inginkan route mana yang akan kita pasang middleware kita bisa tambahkan pada file php yang terletak di directory bootstrap/app.php :

$app->routeMiddleware([
    'user' => App\Http\Middleware\ExampleMiddleware::class
]);

Selanjutnya kita pasang / gunakan middleware tersebut pada route yang kita buat :

//Single route 
$router->group(['middleware' => 'user'], function () use ($router) {
      $router->get('/employee', ['uses' => 'EmployeeController@getEmployee']);
});


//Multiple middleware 
$router->group(['middleware' => ['user','admin']], function () use ($router) {
      $router->get('/employee', ['uses' => 'EmployeeController@getEmployee']);
});

Middleware Parameters

Middleware bisa juga menerima custom parameters, contoh ketika kita membuat verifikasi terhadap user yang memiliki authenticated ‘role’ untuk melakukan action berikutnya, kita bisa membuat sebiah RoleMiddleware yang akan melakukan validasi role contoh pada class berikut :



class RoleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next,$role)
    {
        if(!$request->user()->hasRole($role)){
           //action
        }

        return $next($request);
    }
}

Middleware spesifik bisa kita gunakan/ tambahkan pada route yang telah kita buat :

$router->group(['middleware' => role:create], function () use ($router) {
      $router->post('/employee', ['uses' => 'EmployeeController@getEmployee']);
});

Terminable Middleware

Sewaktu – waktu kita membutuhkan middleware yang akan bekerja setelah HTTP response terkirim kepada browse atau client. contoh seperit session middleware akan membuat session setelah response berhasil dikirim ke browser/client. untuk membuat terminable middleware kita bisa menambahkan function termiate seperti berikut :



class SessionMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return $next($request);
    }

    public function terminate($request,$response)
    {
        // Store session
    }

}

Terminate function bisa merima request atau response, ketika kita membuat terminable middleware kita harus menambahkan atau mendaftarkan class tersebut pada file bootstrap/app.php.

Saat memanggil metode terminate pada middleware, Lumen akan membuat fresh instance dari middleware service container. Jika kita ingin menggunakan instance middleware yang sama ketika metode handle dan terminate dipanggil, daftarkan middleware dengan container. menggunakan metode singleton container.

 

References :

  1. https://lumen.laravel.com/

 

hyvercode

Lumen Introduction

Lumen adalah micro-framework dari Laravel yang sangat ringan dan cepat, Lumen adalah solusi terbaik untuk membuat microservice berdasarkan atau dengan konsep dasar Laravel.

Installation

Server Requirment

  1. PHP >=7.3
  2. OpenSSL PHP Extension
  3. PDO PHP Extension
  4. Mbstring PHP Extension
  5. Composer

Untuk membuat project lumen kita bisa mengunakan composer yaitu dengan printah create-project contoh seperti berikut :

composer create-project --prefer-dist laravel/lumen blog

Struktur awal project Lumen seperti gambar di atas, sedangkan untuk menjalankan aplikasi pada local server kita bisa menggunakan perintah berikut :

php -S localhost:8000 -t public

Sama seperti Laravel file configurasi lumen terletak pada file .env, Karena Lumen adalah framework yang benar-benar terpisah dari Laravel, Lumen tidak secara default menawarkan kompatibilitas dengan library Laravel tambahan seperti Cashier, Passport, Scout, dll. Jika kita ingin mengunakan atau memakai library-library tersebut kita bisa melakukan configurasi secara mandiri.

 

References :

  1. https://lumen.laravel.com/

hyvercode