Laravel adalah framework PHP yang populer dan powerful. Kalau kamu baru mulai belajar web development atau ingin memperdalam kemampuan PHP kamu, belajar Laravel adalah pilihan yang sangat tepat. Artikel ini adalah tutorial Laravel untuk pemula bahasa Indonesia yang akan membantumu memahami dasar-dasar Laravel dan membangun aplikasi web pertamamu. Siap? Mari kita mulai!
Daftar Isi:
- Apa itu Laravel dan Mengapa Harus Belajar?
- Persiapan Lingkungan Pengembangan Laravel (XAMPP, Composer)
- Instalasi Laravel: Langkah Demi Langkah
- Struktur Direktori Laravel: Memahami Anatomi Proyek
- Routing di Laravel: Menentukan Alur Aplikasi
- Controller: Logika Aplikasi dan Interaksi dengan Model
- Blade Templating Engine: Membuat Tampilan yang Dinamis
- Eloquent ORM: Berinteraksi dengan Database dengan Mudah
- Migrations: Mengelola Skema Database dengan Versi Kontrol
- Seeding: Mengisi Database dengan Data Awal
- Authentication: Implementasi Sistem Login dan Registrasi
- Deployment Laravel: Mengunggah Aplikasi ke Server
1. Apa itu Laravel dan Mengapa Harus Belajar?
Laravel adalah framework PHP yang open-source, dirancang untuk pengembangan aplikasi web yang elegan dan efisien. Dibangun berdasarkan prinsip MVC (Model-View-Controller), Laravel menyediakan banyak fitur yang memudahkan developer dalam membangun aplikasi yang kompleks.
Kenapa harus belajar Laravel?
- Kemudahan Penggunaan: Laravel menawarkan sintaks yang bersih, dokumentasi yang lengkap, dan komunitas yang besar. Ini membuatnya mudah dipelajari, bahkan untuk pemula.
- Fitur Lengkap: Laravel menyediakan banyak fitur out-of-the-box, seperti routing, templating engine, ORM (Eloquent), authentication, authorization, dan banyak lagi. Ini mempercepat proses pengembangan dan mengurangi kebutuhan untuk menulis kode dari awal.
- Keamanan: Laravel dibangun dengan mempertimbangkan keamanan. Fitur-fitur seperti CSRF protection, SQL injection prevention, dan XSS protection sudah terintegrasi dengan baik.
- Komunitas yang Aktif: Laravel memiliki komunitas yang besar dan aktif. Kamu bisa dengan mudah mendapatkan bantuan, menemukan package yang berguna, dan berkontribusi pada framework.
- Populer dan Banyak Dicari: Permintaan untuk developer Laravel sangat tinggi di pasar kerja. Menguasai Laravel akan membuka banyak peluang karir untukmu.
- Arsitektur MVC: Dengan menguasai Laravel, secara tidak langsung kamu juga belajar tentang arsitektur MVC yang penting dalam pengembangan web.
Singkatnya, belajar Laravel adalah investasi yang sangat baik untuk karirmu sebagai web developer. Tutorial Laravel untuk pemula bahasa Indonesia ini akan membantumu memulai perjalananmu!
2. Persiapan Lingkungan Pengembangan Laravel (XAMPP, Composer)
Sebelum memulai tutorial Laravel untuk pemula bahasa Indonesia ini, pastikan kamu sudah menyiapkan lingkungan pengembangan yang tepat. Kita membutuhkan PHP, web server, dan package manager.
XAMPP:
XAMPP adalah paket instalasi yang berisi Apache (web server), MySQL (database), dan PHP. Ini adalah solusi yang mudah untuk menyiapkan lingkungan pengembangan di komputer lokalmu.
- Unduh XAMPP: Kunjungi https://www.apachefriends.org/index.html dan unduh versi XAMPP yang sesuai dengan sistem operasi kamu.
- Instal XAMPP: Ikuti petunjuk instalasi yang diberikan. Biasanya, kamu hanya perlu menjalankan installer dan mengikuti wizard.
- Jalankan XAMPP: Setelah instalasi selesai, buka XAMPP Control Panel dan jalankan Apache dan MySQL.
Composer:
Composer adalah dependency manager untuk PHP. Ini memungkinkan kamu untuk menginstal dan mengelola library dan package yang dibutuhkan oleh aplikasi Laravel kamu.
- Unduh Composer: Kunjungi https://getcomposer.org/download/ dan unduh Composer-Setup.exe (untuk Windows) atau ikuti petunjuk instalasi untuk sistem operasi lain.
- Instal Composer: Jalankan installer dan ikuti petunjuk yang diberikan. Pastikan untuk menambahkan direktori PHP ke PATH system variable.
Verifikasi Instalasi:
Setelah menginstal XAMPP dan Composer, verifikasi bahwa instalasi berjalan dengan benar.
- PHP: Buka command prompt atau terminal dan ketik
php -v. Jika PHP terinstal dengan benar, kamu akan melihat informasi versi PHP. - Composer: Ketik
composer -v. Jika Composer terinstal dengan benar, kamu akan melihat informasi versi Composer.
Dengan XAMPP dan Composer sudah terinstal, kamu siap melanjutkan ke langkah berikutnya dalam tutorial Laravel untuk pemula bahasa Indonesia ini.
3. Instalasi Laravel: Langkah Demi Langkah
Sekarang, kita akan menginstal Laravel menggunakan Composer. Buka command prompt atau terminal, lalu navigasi ke direktori di mana kamu ingin menyimpan proyek Laravel kamu. Biasanya, ini adalah direktori htdocs di dalam folder XAMPP kamu.
Contoh:
cd C:xampphtdocs
Setelah berada di direktori yang tepat, gunakan perintah Composer berikut untuk membuat proyek Laravel baru:
composer create-project laravel/laravel nama-proyek
Ganti nama-proyek dengan nama yang kamu inginkan untuk proyek Laravel kamu. Composer akan mengunduh semua dependency yang dibutuhkan oleh Laravel. Proses ini mungkin memakan waktu beberapa menit, tergantung pada kecepatan internet kamu.
Penjelasan Perintah:
composer create-project: Perintah untuk membuat proyek baru menggunakan Composer.laravel/laravel: Nama package Laravel yang ingin diinstal.nama-proyek: Nama direktori yang akan dibuat untuk proyek Laravel kamu.
Setelah instalasi selesai, masuk ke direktori proyek kamu:
cd nama-proyek
Sekarang, jalankan server pengembangan Laravel menggunakan perintah Artisan:
php artisan serve
Ini akan menjalankan server pengembangan Laravel di alamat http://127.0.0.1:8000. Buka alamat ini di browser kamu. Jika semuanya berjalan dengan benar, kamu akan melihat halaman welcome screen Laravel. Selamat! Kamu berhasil menginstal Laravel. Ini adalah langkah penting dalam tutorial Laravel untuk pemula bahasa Indonesia ini.
4. Struktur Direktori Laravel: Memahami Anatomi Proyek
Memahami struktur direktori Laravel sangat penting untuk pengembangan yang efektif. Laravel memiliki struktur direktori yang terorganisir dengan baik, yang membantu kamu menemukan dan mengelola file proyek kamu dengan mudah.
Berikut adalah beberapa direktori penting dalam proyek Laravel:
app/: Berisi kode aplikasi inti kamu, seperti models, controllers, providers, dan policies.bootstrap/: Berisi file yang digunakan untuk bootstrapping framework.config/: Berisi file konfigurasi untuk berbagai aspek aplikasi kamu, seperti database, mail, dan session.database/: Berisi migrations, seeders, dan factories untuk database.public/: Direktori root untuk aplikasi kamu. Berisi fileindex.phpdan asset publik seperti CSS, JavaScript, dan gambar.resources/: Berisi views, lang, dan assets yang tidak dikompilasi seperti SCSS atau JavaScript.routes/: Berisi definisi route untuk aplikasi kamu.storage/: Berisi file yang dihasilkan oleh aplikasi, seperti log, cache, dan uploaded files.tests/: Berisi tests otomatis untuk aplikasi kamu.vendor/: Berisi dependency yang diinstal oleh Composer.
Memahami struktur ini akan sangat membantu saat kita melanjutkan tutorial Laravel untuk pemula bahasa Indonesia ini.
5. Routing di Laravel: Menentukan Alur Aplikasi
Routing adalah mekanisme untuk menentukan bagaimana aplikasi kamu merespon request dari user. Di Laravel, route didefinisikan dalam file yang berada di direktori routes/.
Contoh Route:
Buka file routes/web.php. Kamu akan melihat beberapa contoh route. Mari kita tambahkan route baru:
<?php
use IlluminateSupportFacadesRoute;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/halo', function () {
return 'Halo Dunia!';
});
Perintah Route::get('/halo', function () { ... }); mendefinisikan route yang merespon request GET ke URL /halo. Fungsi anonim yang diberikan sebagai argumen kedua akan dieksekusi ketika route ini diakses. Dalam contoh ini, fungsi tersebut mengembalikan string “Halo Dunia!”.
Untuk melihat hasilnya, buka http://127.0.0.1:8000/halo di browser kamu. Kamu akan melihat tulisan “Halo Dunia!”.
Jenis Route:
Laravel mendukung berbagai jenis route, seperti:
Route::get(): Merespon request GET.Route::post(): Merespon request POST.Route::put(): Merespon request PUT.Route::patch(): Merespon request PATCH.Route::delete(): Merespon request DELETE.Route::resource(): Membuat resource controller untuk operasi CRUD (Create, Read, Update, Delete).
Routing adalah fondasi penting dalam pengembangan web menggunakan Laravel. Ini memungkinkan kamu untuk mengontrol alur aplikasi dan menghubungkan URL dengan logika aplikasi kamu. Ini adalah bagian penting dari tutorial Laravel untuk pemula bahasa Indonesia kita.
6. Controller: Logika Aplikasi dan Interaksi dengan Model
Controller adalah kelas PHP yang bertanggung jawab untuk menangani logika aplikasi dan berinteraksi dengan model untuk mengambil dan menyimpan data. Controller menerima request dari user, memprosesnya, dan mengembalikan response, biasanya berupa view.
Membuat Controller:
Gunakan perintah Artisan make:controller untuk membuat controller baru:
php artisan make:controller HaloController
Ini akan membuat file HaloController.php di direktori app/Http/Controllers/.
Isi Controller:
Buka file HaloController.php dan tambahkan method sapa:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class HaloController extends Controller
{
public function sapa()
{
return 'Halo dari Controller!';
}
}
Menghubungkan Route dengan Controller:
Sekarang, kita perlu menghubungkan route dengan method sapa di controller HaloController. Ubah file routes/web.php menjadi:
<?php
use IlluminateSupportFacadesRoute;
use AppHttpControllersHaloController;
Route::get('/', function () {
return view('welcome');
});
Route::get('/halo', [HaloController::class, 'sapa']);
Perintah Route::get('/halo', [HaloController::class, 'sapa']); menghubungkan route /halo dengan method sapa di controller HaloController.
Buka http://127.0.0.1:8000/halo di browser kamu. Kamu akan melihat tulisan “Halo dari Controller!”.
Controller membantu memisahkan logika aplikasi dari routing dan view, membuat kode kamu lebih terstruktur dan mudah dipelihara. Memahami controller adalah kunci untuk membangun aplikasi Laravel yang kompleks. Ini juga merupakan komponen inti dari tutorial Laravel untuk pemula bahasa Indonesia ini.
7. Blade Templating Engine: Membuat Tampilan yang Dinamis
Blade adalah templating engine bawaan Laravel yang memungkinkan kamu untuk membuat tampilan yang dinamis dan reusable. Blade menggunakan sintaks yang sederhana dan mudah dipelajari, dan menyediakan banyak fitur seperti template inheritance, control structures, dan escaping.
Membuat View:
Buat file halo.blade.php di direktori resources/views/:
<!DOCTYPE html>
<html>
<head>
<title>Halo</title>
</head>
<body>
<h1>Halo, {{ $nama }}!</h1>
<p>Selamat datang di aplikasi kami!</p>
</body>
</html>
Perhatikan sintaks {{ $nama }}. Ini adalah cara Blade untuk menampilkan variabel PHP.
Mengirim Data ke View:
Ubah method sapa di controller HaloController untuk mengirim data ke view:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class HaloController extends Controller
{
public function sapa()
{
$nama = 'Pengguna';
return view('halo', ['nama' => $nama]);
}
}
Perintah return view('halo', ['nama' => $nama]); mengembalikan view halo.blade.php dan mengirim variabel $nama ke view.
Buka http://127.0.0.1:8000/halo di browser kamu. Kamu akan melihat tulisan “Halo, Pengguna! Selamat datang di aplikasi kami!”.
Template Inheritance:
Blade mendukung template inheritance, yang memungkinkan kamu untuk membuat layout dasar dan memperluasnya di view lain.
Buat file layouts/app.blade.php di direktori resources/views/layouts/:
<!DOCTYPE html>
<html>
<head>
<title>@yield('title') - Aplikasi</title>
</head>
<body>
<div class="container">
@yield('content')
</div>
</body>
</html>
Perintah @yield('title') dan @yield('content') mendefinisikan bagian yang akan diisi oleh view yang memperluas layout ini.
Ubah file halo.blade.php menjadi:
@extends('layouts.app')
@section('title', 'Halaman Halo')
@section('content')
<h1>Halo, {{ $nama }}!</h1>
<p>Selamat datang di aplikasi kami!</p>
@endsection
Perintah @extends('layouts.app') memperluas layout layouts/app.blade.php. Perintah @section('title', 'Halaman Halo') mengisi bagian title dengan teks “Halaman Halo”. Perintah @section('content') mengisi bagian content dengan HTML yang kita inginkan.
Buka http://127.0.0.1:8000/halo di browser kamu. Kamu akan melihat tampilan yang sama, tetapi sekarang menggunakan template inheritance.
Blade adalah alat yang powerful untuk membuat tampilan yang dinamis dan mudah dipelihara. Ini adalah bagian penting dari tutorial Laravel untuk pemula bahasa Indonesia ini.
8. Eloquent ORM: Berinteraksi dengan Database dengan Mudah
Eloquent ORM adalah object-relational mapper (ORM) bawaan Laravel yang memudahkan kamu untuk berinteraksi dengan database. Eloquent memungkinkan kamu untuk berinteraksi dengan database menggunakan objek PHP, bukan query SQL.
Membuat Model:
Gunakan perintah Artisan make:model untuk membuat model baru:
php artisan make:model User
Ini akan membuat file User.php di direktori app/.
Menentukan Tabel:
Secara default, Eloquent akan menganggap bahwa model User berkorespondensi dengan tabel users di database. Jika kamu ingin menggunakan nama tabel yang berbeda, kamu dapat menentukan properti $table di model:
<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
protected $table = 'nama_tabel_kamu';
}
Mengambil Data:
Untuk mengambil semua user dari database, gunakan method all():
$users = User::all();
Untuk mengambil user dengan ID tertentu, gunakan method find():
$user = User::find(1);
Menyimpan Data:
Untuk membuat user baru, buat objek User baru, atur propertinya, dan panggil method save():
$user = new User();
$user->name = 'Nama User';
$user->email = '[email protected]';
$user->password = bcrypt('password'); // Enkripsi password
$user->save();
Mengupdate Data:
Untuk mengupdate user yang sudah ada, temukan user tersebut, ubah propertinya, dan panggil method save():
$user = User::find(1);
$user->name = 'Nama User Baru';
$user->save();
Menghapus Data:
Untuk menghapus user, temukan user tersebut dan panggil method delete():
$user = User::find(1);
$user->delete();
Eloquent menyederhanakan interaksi dengan database dan membuat kode kamu lebih mudah dibaca dan dipelihara. Ini adalah komponen kunci dari tutorial Laravel untuk pemula bahasa Indonesia ini, terutama saat bekerja dengan data.
9. Migrations: Mengelola Skema Database dengan Versi Kontrol
Migrations adalah cara untuk mengelola skema database kamu dengan versi kontrol. Migrations memungkinkan kamu untuk membuat, memodifikasi, dan menghapus tabel dan kolom database menggunakan kode PHP, bukan query SQL.
Membuat Migration:
Gunakan perintah Artisan make:migration untuk membuat migration baru:
php artisan make:migration create_users_table
Ini akan membuat file migration baru di direktori database/migrations/.
Definisi Skema:
Buka file migration yang baru dibuat dan definisikan skema tabel yang ingin kamu buat:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
- Method
up()mendefinisikan apa yang akan dilakukan ketika migration dijalankan. Dalam contoh ini, kita membuat tabelusersdengan beberapa kolom. - Method
down()mendefinisikan apa yang akan dilakukan ketika migration di-rollback. Dalam contoh ini, kita menghapus tabelusers.
Menjalankan Migration:
Untuk menjalankan migration, gunakan perintah Artisan migrate:
php artisan migrate
Ini akan menjalankan semua migration yang belum dijalankan.
Rollback Migration:
Untuk me-rollback migration terakhir, gunakan perintah Artisan migrate:rollback:
php artisan migrate:rollback
Migrations memudahkan kamu untuk mengelola skema database kamu dan memastikan bahwa semua developer menggunakan skema yang sama. Ini adalah praktik terbaik dalam pengembangan Laravel dan merupakan bagian penting dari tutorial Laravel untuk pemula bahasa Indonesia ini.
10. Seeding: Mengisi Database dengan Data Awal
Setelah membuat skema database dengan migrations, kamu mungkin ingin mengisi database dengan data awal. Seeding memungkinkan kamu untuk mengisi database dengan data yang sudah ditentukan, seperti data dummy atau data konfigurasi awal.
Membuat Seeder:
Gunakan perintah Artisan make:seeder untuk membuat seeder baru:
php artisan make:seeder UsersTableSeeder
Ini akan membuat file seeder baru di direktori database/seeders/.
Definisi Data:
Buka file seeder yang baru dibuat dan definisikan data yang ingin kamu masukkan ke database:
<?php
namespace DatabaseSeeders;
use IlluminateDatabaseSeeder;
use IlluminateSupportFacadesDB;
use IlluminateSupportFacadesHash;
use IlluminateSupportStr;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => Str::random(10),
'email' => Str::random(10).'@example.com',
'password' => Hash::make('password'),
]);
}
}
Method run() mendefinisikan apa yang akan dilakukan ketika seeder dijalankan. Dalam contoh ini, kita memasukkan satu user baru ke tabel users.
Menjalankan Seeder:
Untuk menjalankan seeder, pertama-tama, buka file database/seeders/DatabaseSeeder.php dan tambahkan seeder yang baru dibuat ke method run():
<?php
namespace DatabaseSeeders;
use IlluminateDatabaseSeeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call([
UsersTableSeeder::class,
]);
}
}
Kemudian, gunakan perintah Artisan db:seed untuk menjalankan seeder:
php artisan db:seed
Ini akan menjalankan semua seeder yang terdaftar di file DatabaseSeeder.php.
Seeding memudahkan kamu untuk mengisi database dengan data awal dan memastikan bahwa aplikasi kamu memiliki data yang cukup untuk diuji. Ini adalah praktik yang berguna, terutama dalam lingkungan pengembangan. Ini juga merupakan bagian penting dari tutorial Laravel untuk pemula bahasa Indonesia ini.
11. Authentication: Implementasi Sistem Login dan Registrasi
Laravel menyediakan scaffolding yang mudah untuk implementasi sistem authentication (login dan registrasi). Dengan beberapa perintah Artisan, kamu bisa membuat sistem authentication yang lengkap dengan view, controller, dan route yang sudah terkonfigurasi.
Membuat Authentication Scaffolding:
Gunakan perintah Artisan ui:auth untuk membuat authentication scaffolding:
composer require laravel/ui
php artisan ui vue --auth
npm install
npm run dev
Perintah ini akan membuat view untuk login, registrasi, reset password, dan verifikasi email. Ini juga akan membuat controller dan route yang sesuai.
Konfigurasi Database:
Pastikan kamu sudah mengkonfigurasi koneksi database di file .env.
Menjalankan Migrations:
Jalankan migrations untuk membuat tabel yang dibutuhkan oleh sistem authentication:
php artisan migrate
Mengakses Halaman Authentication:
Buka http://127.0.0.1:8000/login dan http://127.0.0.1:8000/register di browser kamu. Kamu akan melihat halaman login dan registrasi yang sudah siap digunakan.
Kustomisasi:
Kamu dapat mengkustomisasi tampilan dan logika dari sistem authentication sesuai dengan kebutuhan aplikasi kamu. File view berada di direktori resources/views/auth/, dan controller berada di direktori app/Http/Controllers/Auth/.
Laravel menyediakan sistem authentication yang powerful dan mudah digunakan. Dengan scaffolding yang sudah tersedia, kamu bisa dengan cepat mengimplementasikan sistem login dan registrasi di aplikasi kamu. Ini adalah fitur penting dalam tutorial Laravel untuk pemula bahasa Indonesia ini, karena hampir semua aplikasi web membutuhkannya.
12. Deployment Laravel: Mengunggah Aplikasi ke Server
Setelah selesai mengembangkan aplikasi Laravel, langkah terakhir adalah deployment, yaitu mengunggah aplikasi ke server agar bisa diakses oleh user. Proses deployment bisa bervariasi tergantung pada server dan hosting yang kamu gunakan.
Persiapan:
- Konfigurasi .env: Pastikan file
.envsudah dikonfigurasi dengan benar. Atur environment, koneksi database, dan app key. - App Key: Generate app key jika belum ada:
php artisan key:generate - Compile Assets: Kompilasi asset (CSS, JavaScript) dalam mode production:
npm run production - Optimasi: Optimalkan aplikasi kamu untuk production:
php artisan optimize
Langkah-Langkah Deployment:
- Unggah File: Unggah semua file dan direktori proyek Laravel kamu ke server. Pastikan untuk tidak mengunggah direktori
vendor/dan file.env. - Instal Dependency: Setelah file diunggah, masuk ke direktori aplikasi melalui SSH dan instal dependency menggunakan Composer:
composer install --optimize-autoloader --no-dev - Konfigurasi Web Server: Konfigurasi web server (Apache atau Nginx) untuk mengarahkan root domain ke direktori
public/di dalam direktori aplikasi Laravel kamu. - Konfigurasi Database: Buat database di server dan impor skema database dari migration kamu:
php artisan migrate - Cache: Bersihkan cache konfigurasi dan view:
php artisan config:cachephp artisan view:cache
- File Permissions: Pastikan direktori
storage/memiliki permission yang tepat agar aplikasi bisa menulis file ke direktori tersebut.
Tips:
- Gunakan Version Control: Gunakan Git untuk mengelola kode kamu dan memudahkan deployment.
- Otomatisasi Deployment: Pertimbangkan untuk menggunakan alat deployment otomatis seperti Deployer atau Envoyer.
- Monitoring: Pantau aplikasi kamu setelah deployment untuk memastikan semuanya berjalan dengan lancar.
Deployment adalah langkah penting untuk membuat aplikasi kamu dapat diakses oleh user. Pastikan kamu mengikuti langkah-langkah dengan cermat dan melakukan pengujian setelah deployment. Ini mengakhiri tutorial Laravel untuk pemula bahasa Indonesia ini, semoga berhasil!
Dengan mengikuti tutorial Laravel untuk pemula bahasa Indonesia ini, kamu sudah memiliki dasar yang kuat untuk memulai pengembangan aplikasi web dengan Laravel. Teruslah belajar dan bereksperimen, dan jangan ragu untuk mencari bantuan dari komunitas Laravel jika kamu mengalami kesulitan. Selamat mengembangkan!









