superframework/superframework

The super fastest framework ever for scalable project

v4.0.15 2022-06-16 15:10 UTC

README

The lightweight and fastest PHP framework from the creator of CRUDBooster

Why Super Framework?

Kita mengadopsi beberapa pola pada framework laravel dan sekaligus merangkum apa saja yang paling essensial (terutama bagi kami) dalam development web. Sehingga kami dapat memaksimalkan performa kecepatan dari framework ini.

Daftar Isi

Instalasi

Syarat Kebutuhan Sistem

Sebelum melakukan instalasi pastikan sistem Anda sudah memenuhi persyaratan berikut ini:

  • php 7.3 >= | 7.4 >=
  • Web server Apache / Nginx
  • MySQL / MariaDB / Postgre / SQL Server / SQLite
  • Composer
  • PDO

Opsional, namun direkomendasikan :

  • php Zend OPCache Extension

Perintah Instalasi

Buka terminal / command prompt pada folder yang telah Anda siapkan, dan jalankan perintah berikut:

$ composer create-project superframework/superframework my_new_super

Jika kamu mengalami kegagalan instalasi karena issue platform checking php version tidak sesuai padahal php kamu sudah kompatibel. Kamu bisa tambahkan parameter --ignore-platform-reqs

$ composer create-project superframework/superframework my_new_super --ignore-platform-reqs

[↑ Kembali ke daftar isi ↑]

Memulai

Konfigurasi Environment (.env)

Silahkan copy file .env.example menjadi .env. Apabila OS Anda tidak dapat melakukannya, Anda dapat menggunakan perintah :

$ cp .env.example .env 

Kemudian atur file .env tersebut.

# Bagian ini Anda dapat menggantinya dengan nama proyek
APP_NAME="PHP Super Framework" 

# Bagian ini dapat diganti dengan mysql, pgsql, sqlsrv, sqlite
DB_CONNECTION=mysql

# DB_HOST biarkan localhost
DB_HOST=localhost

# DB_PORT sesuaikan dengan port servis database Anda, untuk mySQL defaultnya adalah 3306
DB_PORT=3306

# DB_DATABASE isi dengan nama database proyek Anda
DB_DATABASE=super

# DB_USERNAME isi dengan user database 
DB_USERNAME=root

# DB_PASSWORD isi dengan password database
DB_PASSWORD=

# Apabila Anda ingin error ditampilkan pada browser, maka isi nilai berikut dengan true
DISPLAY_ERRORS=false

# Apabila Anda ingin merekam setiap kejadian error pada siste, 
# maka isi nilai berikut dengan true. Maka nanti ketika terjadi error tersimpan pada folder /logs
LOGGING_ERRORS=false

[↑ Kembali ke daftar isi ↑]

Struktur Folder

Sebelum Anda lanjut membuat aplikasi dengan framework ini, Anda perlu mengerti terlebih dahulu struktur folder pada framework SuperFramework ini.

/app
    /Helpers 
    /Lang 
    /Migrations 
    /Models 
    /Modules
/bootstrap
/configs
/logs 
/public 
/tasks 
/vendor 

[↑ Kembali ke daftar isi ↑]

/app

Folder app berisi bisnis logika pada aplikasi Anda. Disini akan berisi semua file controller, helper, model, dan lain-lain.

/bootstrap

Folder bootstrap berisi file cache yang digenerasi oleh sistem. Secara praktik Anda tidak perlu menambah / mengurangi apapun yang telah digenerasi pada folder ini.

/configs

Folder configs berisi file pengaturan dasar pada aplikasi. Anda dapat menyesuaikan beberapa pengaturan disini, namun beberapa sudah diarahkan ke file .env

/logs

Folder logs berisi file .log hasil rekaman kejadian - kejadian pada sistem aplikasi Anda, seperti error dan debug.

/public

Folder public ini digunakan untuk file yang dijalankan pertama kali oleh aplikasi. Berisi file index.php serta tempat Anda mengisinya dengan file-file asset css/js.

/tasks

Folder tasks ini berisi file schedule yang akan dijalankan pada cronjob. Anda dapat menduplikasi file task yang ada, dan menyesuaikan sesuai kebutuhan cron job yang baru.

/vendor

Folder vendor ini berisi berbagai macam library yang dibutuhkan pada sistem framework ini. Anda tidak perlu mengubah / menambahnya secara manual, karena sudah dikontrol dan dimanajemen oleh Composer.

[↑ Kembali ke daftar isi ↑]

Controller & Routing

Membuat Controller

Buka tool editor favorit Anda, dan buat file pada

app/Modules/Main/Controllers/TestController.php

Kemudian isikan file controller tersebut dengan format sebagai berikut :

<?php

namespace App\Modules\Main\Controllers;

use SuperFrameworkEngine\Foundation\Controller;

/**
 * Class TestController
 * @route test
 */
class TestController extends Controller {

    /**
     * @return false|string
     * @route /
     * @throws \Exception
     */
    public function index()
    {
        echo "Ini controller percobaan";
    }
}

Lalu kemudian save file tersebut.

# Pastikan Anda membuat nama file controller persis seperti perintah diatas

Buka terminal pada root folder proyek Anda. Dan jalankan perintah berikut ini :

$ php super compile

Perintah diatas digunakan untuk menyimpan perubahan konfigurasi, routing, dan class lainnya.

Jika sudah, Anda dapat mencobanya pada browser:

example.com/test

atau jika menggunakan localhost

localhost/projek_anda/public/test

[↑ Kembali ke daftar isi ↑]

Routing

Routing pada superframework diatur langsung pada setiap class controller.

Routing Class

Routing class adalah routing yang diatur diatas class name. Dengan routing class Anda dapat membuat sebuah awalan routing pada class controller tersebut.

<?php

namespace App\Modules\Main\Controllers;

use SuperFrameworkEngine\Foundation\Controller;

/**
 * @route test
 */
class TestController

Maka akan menghasilkan :

example.com/test

[↑ Kembali ke daftar isi ↑]

Routing Method

Routing method berarti Anda mendefinisikan routing pada setiap method.

    /**
     * @route welcome
     */
    public function welcome()
    {
        echo "Ini controller percobaan";
    }

Maka jika digabung dengan routing class tadi akan menghasilkan:

example.com/test/welcome

[↑ Kembali ke daftar isi ↑]

Routing Dengan Argument

Anda dapat memasukkan argument pada url dan mencocokan pada method Anda dengan cara sebagai berikut:

    /**
     * @route welcome/{argument1}/{argument2}
     */
    public function welcome($argument1, $argument2)
    {
        dd($argument1, $argument2);
    }

Jangan lupa untuk menjalankan perintah berikut sebelum mendapatkan perubahan :

$ php super compile

[↑ Kembali ke daftar isi ↑]

POST / GET

Pada superframework Anda tidak membutuhkan mendeklarasikan secara manual pada setiap routing. Jadi setiap routing dapat berjalan sebagai GET maupun POST. Apabila Anda ingin memvalidasi method yang dikirimkan oleh user, maka Anda harus menggunakan helper khusus seperti contoh berikut :

    /**
     * @route submit
     */
    public function submit()
    {
        if(request_method_is_post()) {
            // Lanjut bisnis logik Anda
        }
        
        // Atau 
        if(request_method_is_get()) {
            // Lanjut eksekusi setelah get
        }
    }

[↑ Kembali ke daftar isi ↑]

CLI (super)

Seperti layaknya framework lain seperti laravel mempunyai artisan pada super framework juga mempunyainya dengan nama super. Cara menggunakannya sebagai berikut:

php super [command]

[↑ Kembali ke daftar isi ↑]

File System

Anda dapat melakukan upload file dengan helper FileSystem berikut

Sebelum memanggil fungsi diatas, pasang use berikut ini diatas class controller.

use SuperFrameworkEngine\App\UtilFileSystem;

[↑ Kembali ke daftar isi ↑]

Session

Untuk menggunakan session, silahkan gunakan helper berikut ini :

[↑ Kembali ke daftar isi ↑]

Cache

Untuk menggunakan cache, silahkan gunakan helper berikut:

[↑ Kembali ke daftar isi ↑]

Request

Jika pada PHP native Anda mengenal $_GET, $_POST, $_REQUEST, pada framework ini telah dibungkus ulang menjadi helper berikut

[↑ Kembali ke daftar isi ↑]

Response

Untuk menampilkan output controller dapat berupa json maupun view blade.

View pada superframework mengadopsi kehebatan "blade" yang Ada pada Laravel. Maka bagi Anda pengguna Laravel pasti sudah terbiasa menggunakan blade ini. Anda dapat membaca dokumentasi lebih banyak pada tautan ini Blade

[↑ Kembali ke daftar isi ↑]

Validation

Anda dapat memvalidasi request user dengan class berikut ini

Validator::make($requestData, $rules);

Atau lebih lengkap :

// Pastikan Anda menambahkan baris ini pada bagian baris use class controller 
use SuperFrameworkEngine\App\UtilValidator\Validator;
use SuperFrameworkEngine\Exceptions\ValidatorException;

// Pada method Anda dapat memanggilnya sebagai berikut
try {
    Validator::make(request(),[
        'title'=>'required'
    ]);
    
    // Code milik Anda selanjutnya
    
} catch(ValidatorException $e) {
    redirect_back(['message'=>$e->getMessage(),'type'=>'warning']);
}

Berikut rule yang dapat Anda gunakan: required, email, url, int, unique:{table},exists:{table},{field}

[↑ Kembali ke daftar isi ↑]

Database ORM

Untuk membuat query pada superframework Anda dapat menggunakan DATABASE ORM bawaan ini.

Lebih detail cara kerja fungsi ini Anda bisa merujuk ke file vendor/fherryfherry/super-framework-engine/src/App/UtilORM/ORM.php namun jangan mengubah file ini secara langsung karena perubahan Anda akan hilang jika Anda update.

[↑ Kembali ke daftar isi ↑]

Helper

Berikut ini helper yang tersedia pada superframework

Collection

Anda bisa menggunakan fungsi simple_collect untuk mengolah suatu array menjadi collection sehingga memudahkan untuk memodifikasi, filtrasi dan lain-lain pada suatu array.

$data = simple_collect([1,2,3,4])

// Menghitung total array
$result = $data->count();

// Mendapatkan array 
$result = $data->get();

// Menghitung summary by key
$result = $data->sum($key = "key");

// Menghitung rata-rata by key
$result = $data->avg($key = "key");

// Memberikan kondisi sama dengan dan mendapatkan 1 data
$result = $data->whereEqual("key","value")->first();

// Memberikan kondisi tidak sama dengan dan mendapatkan 1 data
$result = $data->whereNotEqual("key","value")->first();

// Memberikan kondisi in array dan mendapatkan data array
$result = $data->whereIn("key",[1,2,3,4])->get();

// Memberikan kondisi not in array dan mendapatkan data array
$result = $data->whereNotIn("key",[1,2,3,4])->get();

// Memberikan kondisi like
$result = $data->whereLike("key","value")->get();

// Memberikan kondisi negtive like
$result = $data->whereNotLike("key","value")->get();

// Memberikan kondisi lebih besar dari
$result = $data->whereGreaterThan("key",5)->get();

// Memberikan kondisi lebih kecil dari
$result = $data->whereLessThan("key",5)->get();

// Memberikan kondisi lebih besar dari sama dengan
$result = $data->whereGreaterThanEq("key",5)->get();

// Memberikan kondisi lebih kecil dari sama dengan
$result = $data->whereLessThanEq("key",5)->get();

[↑ Kembali ke daftar isi ↑]

Firebase Cloud Message (FCM)

Anda bisa menggunakan class berikut untuk mengirim FCM

// Tambahkan import ini diatas nama class
use SuperFrameworkEngine\App\UtilFirebase\FCM;

// ===== Detail Penggunaan Class =====
$msg = new FCM();
$msg->title("Judul Pesan");
$msg->message("Deskripsi pesan");

// Untuk menambahkan data lain
$msg->data([
 "data1"=>"value1"
]); 

// Kirim fcm
$msg->send();

[↑ Kembali ke daftar isi ↑]

Model, Repository, Service

Ini adalah sebuah pattern development. Kami menganjurkan untuk selalu menggunakan pattern ini ketika Anda membuat query pada database.

Model

Berisi attribut-attribute sesuai dengan kolom yang ada pada tabel.

Repository

Anda dapat membuat seluruh query pada aplikasi Anda menggunakan repository ini.

Service

Anda dapat membuat query yang memiliki logika khusus pada class service ini.

// Anda bisa menggunakan model class untuk query database

// Dari Model
$data = Users::query()->where("id=?",[$id])->find();

// Dari Repository
$data = UsersRepository::query()->where("id=?",[$id])->find();

// Dari Service
$data = UsersService::query()->where("id=?",[$id])->find();

Anda cukup menambahkan query() pada chain yang pertama.

[↑ Kembali ke daftar isi ↑]

Cron Job / Scheduler

Fitur cron job / scheduler pada superframework menggunakan library Crunz/Schedule. Anda dapat membuat sebuah file php baru di folder /tasks dengan isian seperti berikut :

<?php

use Crunz\Schedule;

$schedule = new Schedule();

# Pada bagian ini Anda dapat menuliskan perintah command line
$task = $schedule->run(PHP_BINARY. ' super {command}');

# Pada bagian ini Anda dapat memberikan timeline waktu kapan cron ini akan dijalankan
# daily, hourly, everyThreeHours, dll
$task->daily()->description("Run feed content");

return $schedule;

Lalu Anda harus menambahkan perintah ini pada sistem crontab pada linux Anda.

* * * * * * cd /path/html/project/ && /var/bin/php super schedule:run 

[↑ Kembali ke daftar isi ↑]

FAQ

Install projek pada web server Nginx, ke sub folder, hasilnya 404 Not Found

Biasanya kita harus menulis syntax rewrite khusus pada virtual host nginx. Tidak semua syntax yang Anda dapatkan akan langsung bekerja, biasanya muncul 404 Not Found. Cobalah solusi dari stackoverflow ini : https://stackoverflow.com/a/61013994/934326

Useful Libraries

Berikut ini adalah library tambahan yang sangat berguna untuk menunjang pengembangan aplikasi Anda. Anda dapat menggabungkannya dengan superframework.

  1. CRUD Generator - a crud generator for superframework https://github.com/fherryfherry/crud-generator
  2. Simple HTML DOM Wrapper - PHP Dom https://github.com/Wikia/simplehtmldom
  3. PHPMailer - Email sender https://github.com/PHPMailer/PHPMailer
  4. Imagine - Image manipulation
    https://imagine.readthedocs.io/en/latest/index.html
  5. Snappy - PDF Generation https://github.com/KnpLabs/snappy
  6. PHPSpreadsheet - Spreadsheet XLS Generation https://phpspreadsheet.readthedocs.io/en/latest/
  7. Spout - XLS fast read and write https://opensource.box.com/spout/getting-started/
  8. DOMPDF - PDF Generation https://github.com/dompdf/dompdf

[↑ Kembali ke daftar isi ↑]

Support & Donation

Hi thanks for using my open source project, you could support me via : https://saweria.co/ferryariawan or via https://buymeacoffee.com/ferryariawan

Contact

Laporan keamanan / celah / security dapat Anda kirimkan ke ferdevelop15@gmail.com

[↑ Kembali ke daftar isi ↑]