Features
MVC Architecture
Model-View-Controller pattern untuk struktur kode yang terorganisir
Built-in Security
Perlindungan SQL injection, XSS prevention, dan manajemen session yang aman
Error Handling
Error logging yang komprehensif dan custom error pages
Dark Mode
UI modern dengan fungsi toggle dark mode
Responsive Design
Interface responsive berbasis Bootstrap
DataTables
Interface datatables berbasis Bootstrap
Database Support
Koneksi database MySQL dan MySQLi
Project Structure
Configuration
Environment Settings (env.php)
define('DEBUG', 'true'); // Enable/disable debug mode
define('BASEURL', 'http://localhost/sfrw_3/');
define('DBNAME', ''); // Database name
Database Configuration (library/config.txt)
Format: host, username, password, database, driver
Email Configuration
define('MAILHOST', 'smtp.yourdomain.com');
define('MAILUSER', 'yourmail@yourdomain.com');
define('MAILPASS', '');
define('MAILPORT', '587');
Security Features
SQL Injection Protection
- Built-in
anti_injection()function untuk sanitasi input - Dukungan parameterized queries
- HTML entity encoding dengan
htmlspecialchars()
XSS Prevention
- Validasi dan sanitasi input
- Output encoding untuk semua input pengguna
- Mechanisme proteksi CSRF
Session Security
- Timeout session otomatis (dapat dikonfigurasi)
- Regenerasi session
- Penyimpanan session yang aman
Error Handling
- Custom error pages (403, 404, 500)
- Error logging ke
logs/error.log - Display error berbasis environment
UI Components
Dark Mode Support
Framework ini mencakup toggle dark mode bawaan:
- Pergantian tema otomatis
- Preferensi pengguna yang persisten
- Transisi yang smooth
Responsive Design
- Integrasi Bootstrap 5
- Pendekatan mobile-first
- Kompatibilitas cross-browser
Form Components
- Form login dengan styling
- Tombol social login
- Fungsionalitas remember me
- Link pemulihan password
Routing System
Routing ditangani di web/route.php:
if(routeget('/', ROUTE)){
return Indexcontroller::index();
}
// Login route
if(routeget('login', ROUTE)){
require_once view('login');
}
// Logout route
if(routeget('signout', ROUTE)){
require_once view('signout');
}
// 404 fallback
{
require_once view('pagenotfound');
}
Models
User Model (app/Models/Users.php)
static public function schemafillable() {
$fill = [
'id',
'fullname',
'email',
'username',
'passsword',
'active',
'role',
];
return implode(", ", $fill);
}
static public function schematable($table = "master_users") {
return $table;
}
}
Controller
Controller (mvc/controller/Controller.php)
static public function index() {
require_once view('index', [
$data['title'] = "sfrw Framework",
]);
}
}
Utility Functions
Date & Time Functions
datelongind('tanggal pada database'): Format tanggal Indonesia panjangdate_indo('tanggal pada database'): Format tanggal IndonesiavalidateDate('tanggal pada database'): Validasi tanggal
Security Functions
anti_injection('value'): Pencegahan SQL injectionanti_number_format('value'): Pembersihan format angka seperti (,)encrypt('value'): Enkripsi data value
Helper Functions
permintaanMysql('query'): Permintaan Query SQLmysqlAmbilArray('variabel dari `permintaanMysql`'): Ambil Query SQLbarisAngkaMysql('variabel dari `permintaanMysql`'): Hitung jumlah baris dalam Query SQLget_client_ip(): Deteksi IP clientget_client_browser(): Deteksi browserthousandsCurrencyFormat('value'): Format mata uangalert('success or warning', 'judul', 'deskripsi', 'url'): Redirect dengan alertrouteget('rute URL', ROUTE, 'administrator'): Routing ke halaman yang berisikan URL, variabel ROUTE, dan role akses yang bisa lebih dari satu dengan pemisah koma contoh. administrator, user
Installation
Via GitHub Repository
Clone Sunda Framework dari repository resmi:
cd sfrw
Manual Installation
- Download file framework dari repository
- Extract ke direktori web server Anda
- Konfigurasi pengaturan database di
library/config.txt - Set environment variables di
env.php - Buat tabel database Anda
- Akses aplikasi melalui browser web
Aplikasi tambahan yang dibutuhkan
- xampp, lampp, WampServer, MAMP, AMPPS, EasyPHP, atau Laragon untuk kebutuhan virtual server
- Apache server atau MySQL server bisa juga install Apache server dan MySQL server
- VS Code atau Trae kebutuhan untuk menulis code
Requirements
- PHP 7.4 atau lebih tinggi
- Database MySQL/MariaDB
- Web server Apache dengan mod_rewrite
- Ekstensi PHP: mysqli, session, json
Development
Menambahkan Route Baru
- Edit
web/route.php - Tambahkan kondisi route Anda
- Buat controller dan view yang sesuai
Membuat Controllers
- Buat file baru di
mvc/controller/ - Extend kelas dasar
Controller - Implementasikan method Anda
Sample login.controller.php:
use app\Models\Users;
class Logincontroller extends Controller {
public static function loginform($uri) {
$loginModel = new Loginmodel;
return $loginModel->loginformmodel($uri);
}
}
Membuat Ekstensi Models
- Buat file baru di
mvc/model/ - Extend kelas dasar
Controller - Implementasikan method Anda
Sample login.model.php:
use app\Models\Users;
use app\Models\Forgotlink; class Loginmodel extends Controller {
function loginformmodel($uri) {
if(isset($_POST['login']) and $_POST['login']=="MASUK"){
$password = anti_injection(md5($_POST['password']));
$username = anti_injection($_POST['username']);
$login = permintaanMysql("SELECT fullname, username, password, active, role FROM ".Users::schematable()." WHERE username='".$username."'");
$data = mysqlAmbilArray($login);
if(barisAngkaMysql($login) == 0){
Logcarbon::carbonlog($username." :: login denied : not found","logsignin");
$_SESSION['error'] = "true";
alert('warning', 'Attention..!', 'login denied.', $uri);
}
elseif($data['active'] == 'N'){
Logcarbon::carbonlog($username." :: login denied : inactive","logsignin");
$_SESSION['error'] = "true"; alert('warning', 'Attention..!', 'You are no longer able to log into this system.', $uri);
}
elseif($data['password'] != $password){
$_SESSION['usertrue'] = $username;
Logcarbon::carbonlog($username." :: login denied : wrong password","logsignin");
$_SESSION['error'] = "true"; alert('warning', 'Attention..!', 'Please re-check the Username/ email or Password you entered, make sure the data you entered is correct.', $uri);
}
else{
$_SESSION['error'] = "true";
if(ENVIRONMENT == 'maintenance' and $data['role'] != 'administrator'){
alert('warning', 'Attention..!', 'Login denied. system is under maintenance.', $uri);
}else{
$_SESSION['username'] = $data['username'];
$_SESSION['fullname'] = $data['fullname'];
$_SESSION['accessme'] = $data['role'];
Logcarbon::carbonlog($username." :: login success","logsignin");
//membuat sesi timeout $_SESSION['timeout'] = WAKTUINI+KADALUARSA;
$_SESSION['timelog'] = WAKTUINI+KADALUARSA+13;
$_SESSION['error'] = "false";
alert('success', '', '..Waiting to sign in..', $uri);
}
}
}
}
}
Membuat Models
- Buat file baru di
app/Models/ - Extend kelas dasar
Model - Definisikan schema dan method Anda
Error Handling
Semua error dicatat ke logs/error.log dengan informasi detail:
- Timestamp
- Alamat IP client
- Informasi browser
- Detail error
- Request URI
License
Framework ini open-source dan tersedia untuk penggunaan personal dan komersial.
Sunda Framework (SFRW) v3.0 - Built with ❤️ for modern PHP development
Traktir saya ngopi