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:
Jalankan perintah php artisan migrate untuk membuat tabel pengguna default Laravel.
Langkah 4: Routing dan Implementasi Autentikasi
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
Jalankan aplikasi Laravel dengan perintah php artisan serve.
Buka Postman atau alat serupa untuk menguji API.
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.
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
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
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
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
<?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
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.
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 :
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 :
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.
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
PHP >=7.3
OpenSSL PHP Extension
PDO PHP Extension
Mbstring PHP Extension
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.