Dokumentasi Garuda Framework Pro Edition

Stable Version 6.1


1. Pendahuluan


Pertama kali saya ucapkan terima kasih kepada Tuhan YME, karena saya dapat menyelesaikan Garuda Framework Pro Edition PHP ini. Awal tujuan membuat framework ini adalah untuk kebutuhan pribadi saya agar dapat mempermudah saya dalam mengerjakan project website.

Framework ini hampir mendekati sempurna, dan sudah dapat membantu 60% pengerjaan sebuah app website. Framework ini membutuhkan sedikit pengetahuan tentang OOP agar dapat digunakan dengan maksimal Contoh website yang sudah saya buat dengan menggunakan GF Pro ini yaitu Room Chat dan Generator Short URL

Garuda Framework Professional untuk saat ini sudah mendukung 3 database :
1. MySql (Hanya dapat terhubung 1 database mysql )
2. Sqlite ( Dapat terhubung lebih dari 1 database Sqlite )
3. PostgreSql ( Dapat terhubung lebih dari 1 database PostgreSql )

Berikut adalah spesifikasi sistem yang diperlukan :

System Requirements

  • Server Lokal Seperti Xampp atau Wamp Server
  • Bahasa pemograman yang digunakan -> Minimal Menggunakan PHP 7.0 atau 7.1 (Rekomendasi)
  • Contoh Database Yang Digunakan Maria DB, SQLite dan PostgreSql
  • Browser bisa menggunakan Chrome / Firefox / atau dll
  • Editor bisa menggunakan Notepad++/ Sublime Text / VSCode / Atom / Vim / atau dll
  • Catatan : "Jika anda masih menggunakan versi PHP lama atau < 7.0 , Maka segera UPDATE terlebih dahulu versi PHP anda dengan versi yang terbaru pada saat ini, jika tidak maka kemungkinan framework ini tidak berjalan atau ERROR"

    2. Getting Started #back to top

    • 1. Extract file master yang telah anda download, kemudian copy kedalam folder project "htdocs" anda, beri nama folder "GF" atau "Apapun"
    • 2. Kemudian buat database dengan nama "db_gf" (hanya untuk sebagai sample), lalu import data file .mysql (disertakan) kedalam database, pastikan konfigurasi server anda seperti dibawah ini
    • Server : localhost
    • Database : db_gf
    • Username : root
    • Password :

    • Konfigurasi informasi database server dapat dilihat pada file "app/config.php" array => $config_database , atau lihat cara mengubah informasi database server di sini
    • 3. Jalankan pada browser 'localhost/nama_direktori/'

      Penjelasan Sedikit Mengenai Router, Controller, Model, dan View di GF Pro
    • 1. Router , adalah pusat kontrol untuk mengatur parameter URL
    • 2. Controller, digunakan untuk membuat rules atau modul
    • 3. Model, digunakan untuk mengelola data kedatabase
    • 4. View, sebagai output akhir (HTML)

    3. Konfigurasi Framework#back to top

    1. Konfigurasi Bagian Pertama Terletak Pada File 'system/GF_Production.php'

    
                            return $app_production = array(
                              'maintenance'     => false,
                              'file_maintenance'  => 'maintenance',
                              'notice_error'    => true,
                              'time_zone'       => 'Asia/Jakarta',
                              'uri_parameter'   => 'p',
                              'start_benchmark'   => true);
    
                            
    • Line 2 : Untuk membuat website maintenance, false = maintenance , true = normal
    • Line 3 : Untuk memberitau nama file maintenance yang terletak pada "app/view/error/maintenance.html"
    • Line 4 : Untuk mengaktifkan notice error PHP , true = aktif, false = tidak
    • Line 5 : Untuk mengatur zona waktu yang digunakan default "Asia/Jakarta"
    • Line 6 : Untuk membuat parameter uri dengan nama 'p', jika ingin mengganti nilai parameter ini, maka anda harus mengganti nilai di htaccess pula -> RewriteRule ^(.+)$ index.php?p =$1 [QSA,L]
    •                                       RewriteEngine On
                                            #RewriteCond %{HTTPS} !on
                                            #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
      
                                            RewriteCond %{REQUEST_FILENAME} !-f
                                            RewriteCond %{REQUEST_FILENAME} !-d
                                            # ganti dibagian ini
                                            RewriteRule ^(.+)$ index.php?p=$1 [QSA,L]
                                        
    • Line 7 -> Untuk mengaktifkan function _startMicroTime(); , untuk mengukur speed aplikasi


    2. Konfigurasi Bagian Kedua Terletak Pada File 'app/config/config.php'


    • a). Konfigurasi 'class_database' dan 'database_use' , secara default, driver/class database yang digunakan adalah mysqli, dan database yang digunakan adalah mysql atau maria db
    • Jika anda ingin menggunakan PDO , DNS database yang tersedia di framework ini hanya tersedia untuk MySql, untuk DNS database microsoft access, sqlite, sql server, dan oracle , anda harus mencari sendiri. Dan di framework ini saya rekomendasikan menggunakan MySqli
                                         
                                            $class_database    = array('mysqli','pdo','sqlite','postgresql');
      
                                           $database_use       = array('mysql','sqlite','sqlserver','oracle');
      
                                    
    • b). Konfigurasi selanjutnya yaitu
    • 
                                     $config_app     = array(
                                                              'run_database'      =>  true,
                                                              'multi_language'    =>  true,
                                                              'class_database'    =>  $class_database[0],
                                                              'database_use'      =>  $database_use[0]
                                                                                                      );
                                    
    • Line 2 : Untuk mengaktifkan database, true = aktif, false = tidak
    • Line 3 : Untuk mengaktifkan multi_language dengan menggunakan cookie, true = multi language, false = tidak
    • Line 4 : Untuk memilih class database yang digunakan, default -> $class_datbase[0] = mysqli
    • Line 5 : Untuk memilih database yang digunakan, default -> $database_use[0] = mysql
    c). Konfigurasi selanjutnya yaitu informasi database server
                                      $config_database  = array(
                                                        'server_name'    => 'localhost',
                                                        'user_name'      => 'root',
                                                        'database_name'  => 'db_gf',
                                                        'password'       => ''
                                                                               );
                                

    d). Konfigurasi selanjutnya yaitu, jika mengaktifkan multi_languange, secara default maka bahasa yang terpilih adalah 'ind' pada bagian 'default_value_languange'

                                    $language_name     = array(
                                    'ind',
                                    'eng',
                                    );
    
    
                                    $language_data  = array(
                                    'indonesia',
                                    'english',
                                    );
    
                                    $cookie_config      = array(
                                          'name_language_cookie'     =>'app-language-GF',
                                          'default_value_language'   => $language_name[0]);
                                  
  • Line 1 : $language_name adalah key untuk membuat cookie multi language, jika anda ingin menambahkan bahasa lain maka harus menambahkan nilai di $language_data
  • Line 7 : $language_data adalah nama file yang akan dituju, yang terletak pada 'app/config/language/contoh.php'
  • Line 12 : $cookie_config adalah nama dari cookie untuk multi language, serta default valuenya, sebagai contoh , nama multi language cookienya adalah 'app-language-GF' dan default valuenya adalah 'ind'

  • e). Konfigurasi selanjutnya yaitu , mengatur file LIBRARY yang akan digunakan , Secara default library yang tersedia yaitu PHP Mailer, PHPQrCode, Fpdf, dan Mobile Detect

                               $_library_app      = array(
                                                    'phpmailer/PHPMailerAutoload',
                                                    'phpqrcode/qrlib',
                                                    'fpdf/fpdf',
                                                    'Mobile_Detect/Mobile_Detect',
                                                    'captcha/sys'
                                                                    );
                                
    Untuk menambahkan library baru anda harus membuat folder didalam "app/library/nama_folder/", Kemudian tambahkan kedalam array diatas, "nama_folder/nama_file".

    f). Konfigurasi selanjutnya yaitu , mengatur file HELPER yang akan digunakan , Secara default helper yang tersedia yaitu 'MyHelper', isi dari helper bisa digunakan untuk membuat function-function yang anda butuhkan dalam pembuatan website

                                $_helper_app    = array('MyHelper');
                                
    Isi array diatas adalah nama dari file helper pada "app/helper/nama_helper.php".

    g). Konfigurasi selanjutnya yaitu , mengatur file ROUTER yang akan digunakan , Untuk file router yang tersedia hanya sebagai contoh

                                $_router_app    = array(
                                                        'Router-Satu','Router-Dua','Router-Tiga'
                                                        ,'Router-Empat','Router-Lima','Router-Enam'
                                                        ,'Router-Tujuh','Router-Delapan','Router-Sembilan'
                                                        ,'Router-Sepuluh'
                                                        );
    
                                
    Isi array diatas adalah nama dari file router pada "app/router/nama_router.php".

    h). Konfigurasi selanjutnya yaitu , mengatur file Controller yang akan digunakan , Untuk file controller yang tersedia hanya sebagai contoh

                                  $_controller_app  = array('Controller-Satu');
    
                                
    Isi array diatas adalah nama dari file controller pada "app/controller/nama_controller.php".

    i). Konfigurasi selanjutnya yaitu , mengatur file Model yang akan digunakan , Untuk file Model yang tersedia hanya sebagai contoh

                                  $_model_app     = array('Model-Satu','Model-Dua',"Model-Tiga","Model-Empat","Model-Lima","Model-Enam");
    
                                
    Isi array diatas adalah nama dari file model pada "app/model/nama_model.php".

    4. Cara Membuat Router#back to top

    Hal yang harus dibuat untuk membuat router adalah, mendeklarasikan name space 'use System/GF_Router as GF' , GF dapat anda ganti sesuai dengan yang anda inginkan

    Untuk Route dibaca sesuai urutan dari paling atas kebawah, jika ada dua nama Route yang sama , maka yang dieksekusi adalah Route yang pertama, Paremeter URL selalu pada bagian pertama contoh Route("Parameter URL","File View atau Callback Function")

                                    // Name space untuk Router
                                    use System\GF_Router as GF;
                                    
    Pada awal Route selalu sertakan Route kosong , untuk mengatur halaman default dialihkan ke "...", sebagai contoh
                                      GF::Route("","home");
                                    
    Maka ketika mengunjungi locahost/GF/ secara otomatis akan mengalihkan kehalaman "app/view/home.php" , atau
                                      GF::Route("",function(){
                                          echo "Hello World";
                                      });
                                    

    Untuk membuat halaman home, 'localhost/GF/home' , seperti berikut :
                                     GF::Route("Home");
                                    
    Maka secara otomatis akan mengalihkan kehalaman "app/view/home.php"
    Untuk membuat halaman home, 'localhost/GF/home' , dengan mengalihkan ke view yang berbeda seperti berikut :
                                     GF::Route("Home","change-home");
                                    
    Maka secara otomatis akan mengalihkan kehalaman "app/view/change-home.php"
    Atau mengalihkan view didalam folder 'user', contoh
                                     GF::Route("Home","user/home");
                                    
    Maka secara otomatis akan mengalihkan kehalaman "app/view/user/home.php"
    Atau bisa menggunakan callback function, contoh
                                     GF::Route("Home",function(){
                                        // logic here...
    
                                        GF::setView("home");
                                     });
                                    
    Untuk membuat view di callback function dapat dilihat pada line 4 diatas.

    Untuk mengekstrak variabel kedalam view dengan 1 data array, sebagai contoh seperti berikut ini
    
                                    GF::Route("Home",function(){
    
                                        $result['username'] = "Garuda Framework";
                                        $result['email'] = "Garuda@Framework.com";
                                        GF::setView("home",$result);
                                    });  
    Maka pada view home, array $result akan menjadi variabel $username, dan $email
    Atau mengekstrak 2 data array, sebagai contoh seperti berikut ini
    
                                    GF::Route("Home",function(){
    
                                        $result['username'] = "Garuda Framework";
                                        $result['email'] = "Garuda@Framework.com";
    
                                        $data['id_user'] = "12";
                                        GF::setView("home",$result,$data);
                                    });  
    Maka pada view home, array $result akan menjadi variabel $username, $email, dan $id_user

    Untuk membuat pretty GET -> "localhost/GF/post/a/b/c/d" Gunakan tanda { } atau tanda # untuk mempercantik parameter.
    Jumlah maksimum parameter adalah 11 -> a / b / c / d / e / f / g / h / i / j / k , Contoh kode :

                                      GF::Route("post/{ a }/{ b }/{ c }/{ d }",function($get){
                                        $a = $get['a'] ?? false;
                                        $b = $get['b'] ?? false;
                                        $c = $get['c'] ?? false;
                                        $d = $get['d'] ?? false;
    
                                        //  alihkan ke halaman view
                                        GF::setView("post",$get);
                                      });
                                    
    atau
                                      GF::Route("post/# a #/# b #/# c #/# d #",function($get){
                                        $a = $get['a'] ?? false;
                                        $b = $get['b'] ?? false;
                                        $c = $get['c'] ?? false;
                                        $d = $get['d'] ?? false;
    
                                        //  alihkan ke halaman view
                                        GF::setView("post",$get);
                                      });
                                    

    Parameter yang dibuat akan dikembalikan dalam bentuk array.

    Jika anda ingin menggunakan GET PHP seperti biasanya http://localhost/GF/get-biasa&nama=contoh, bisa dengan seperti ini

                                            GF::Route("get-biasa",function(){
                                                  $nama = $_GET['nama'] ?? false;
                                                  echo $nama;
                                            });
                                      
    atau dengan POST PHP seperti biasanya
                                            GF::Route("post-biasa",function(){
                                              $nama = $_POST['nama'] ?? false;
                                              echo $nama;
                                            });
                                      

    Dan yang terakhir yaitu RouteToOne, berfungsi untuk membuat satu parameter dinamis seperti www.url.com/username, sehingga username dapat berubah-ubah. Gunakan method ini di AKHIR file Router yang ada, sehingga function RouteToOne tidak di eksekusi diawal. (Lihat contoh di Router-Sembilan)
                                            GF::RouteToOne("username",function($username){
                                                   echo $username;
                                            });
                                      

    5. Cara Membuat Model#back to top

    Untuk membuat model , buat terlebih dahulu sebuah Class lalu extends dengan elDB

                                class Contoh extends elDB
                                {
                                    function __construct()
                                    {
                                      # code...
                                    }
                                }
                              

    Untuk mendapatkan jumlah data gunakan method getCount(), sebagai contoh

                                  public function countData(){
                                      $this->setQuery("select id_user from t_user");
                                      $result = $this->getCount();
                                      return $result;
                                  }
                              

    Berikut ini adalah cara untuk mengelola data kedatabase menggunakan MySQLI

    Untuk mengecheck id dari tabel gunakan method checkId(), method ini sama dengan "select nama_field from nama_tabel where nama_field=value_field", cocok digunakan untuk login kedalam sistem ,sebagai contoh (maximal 3 parameter)

                              public function getId(){
                                $result  = $this->checkId("nama kolom","nama tabel","colom primary key"
                                                                                   ,"value primary key" );
                                return $result ? true : false;
                              }
                              
    Sebagai contoh, query untuk dibawah ini adalah "select id_user from t_user where username='albert' and password='abcabc' limit 1", maka penulisannya cukup seperti ini :
                              public function getId(){
                                $result  = $this->checkId("id_user","t_user","username","albert"
                                                                            ,"password","abcabc");
                                return $result ? true : false;
                              }
                              

    Untuk mendapatkan seluruh data gunakan method getAllData(), sebagai contoh

                               private function $data = array();
                               public function getAll()
                               {
                                 $this->setQuery("select id_user,username,email,pass from t_user order by id_user asc");
                                 // return array
                                 return $this->getAllData();
                               }
                              

    Untuk insert data dapat menggunakan method insert(), sebagai contoh

                                        public function insertData()
                                        {
    
                                          $result = $this->insert("nama_tabel","kolom 1","value kolom 1",
                                                                               "kolom 2","value kolom 2",
                                                                               "kolom 3","value kolom 3" );
                                          return $result ? true : false;
                                        }
                              

    Untuk insert data batas 9 kolom dan 9 value

                                    $result = $this->insert("nama_tabel","kolom 1","value kolom 1"
                                                                        ,"kolom 2","value kolom 2"
                                                                        ,"kolom 3","value kolom 3"
                                                                        ,"kolom 4","value kolom 4"
                                                                        ,"kolom 5","value kolom 5"
                                                                        ,"kolom 6","value kolom 6"
                                                                        ,"kolom 7","value kolom 7"
                                                                        ,"kolom 8","value kolom 8"
                                                                        ,"kolom 9","value kolom 9" );
                              

    Untuk update date dapat menggunakan method update(), sebagai contoh

                              public function updateData(){
                                      $result_value = $this->checkId("kolom primary key","nama_tabel","where kolom","value kolom");
                                      if (! $result_value){ return false && exit; }
    
                                      $result = $this->update("t_user","id_user",$this->id_user
                                                    ,"username",$this->username
                                                    ,"email"    ,$this->email
                                                    ,"pass"     , $this->password);
    
                                      return $result ? true : false;
                                }
                              

    Untuk update data batas 9 kolom dan 9 value

                                $result = $this->update("nama_tabel","kolom primary key","value primary key"
                                                                    ,"kolom 1 " , "value kolom 1 "
                                                                    ,"kolom 2 " , "value kolom 2 "
                                                                    ,"kolom 3 " , "value kolom 3 "
                                                                    ,"kolom 4 " , "value kolom 4 "
                                                                    ,"kolom 5 " , "value kolom 5 "
                                                                    ,"kolom 6 " , "value kolom 6 "
                                                                    ,"kolom 7 " , "value kolom 7 "
                                                                    ,"kolom 8 " , "value kolom 8 "
                                                                    ,"kolom 9 " , "value kolom 9 " );
                              

    Untuk hapus data dapat menggunakan method delete(), sebagai contoh

                                  public function deleteData()
                                  {
                                    $result_value = $this->checkId("kolom primary key","nama tabel","where kolom primary key","value kolom primary keu");
                                    if (! $result_value){ return false && exit; }
    
                                    $result = $this->delete("nama tabel","kolom primary key","value primary key");
                                    return $result ? true : false;
                                  }
                                  

    untuk method delete(), maksimal parameter yaitu 4, contoh

                                $result = $this->delete("nama tabel","kolom primary key 1","value primary key 1"
                                                                    ,"kolom unique key 2","value unique key 2",
                                                                      ,"kolom unique key 3","value unique key 3"
                                                                        ,"kolom unique key 4","value unique key 4");
                                return $result ? true : false;
                              


    Untuk menggunakan Query bebas, anda bisa gunakan method execute(), sebagai contoh

                                public function createData(){
                                  $this->setQuery("insert into t_user("username","email") VALUES ('contoh','contoh@gmail.com')");
                                  $result = $this->execute();
                                }
                                public function updateData(){
                                  $this->setQuery("update t_user set username='abc',email='abc' where id_user=12");
                                  $result = $this->execute();
                                }
                                public function deleteData(){
                                  $this->setQuery("delete from t_user where id_user=12");
                                  $result = $this->execute();
                                }
                              

    Berikut method-method yang diturunkan dari parent elDB

                              /*
                              *  Method Dari Parent elDB MySqli
                              *
                              *  -> setQuery()   < Wajib Periksa Petik Satu >
                              *     # getCount()   = mengembalikan jumlah data
                              *     # getData()    = mengembalikan data yang diinginkan
                              *     # getAllData() = mengembalikan seluruh data
                              *
                              *  -> insert()     = insert data < Tidak Perlu Periksa Petik Satu >
                              *  -> update()     = update data < Tidak Perlu Periksa Petik Satu >
                              *  -> delete()     = delete data < Tidak Perlu Periksa Petik Satu >
                              *
                              *  -> checkId()    = check data berdasarkan id primary key
                              *
                              *  -> execute()        = method query bebas , insert update dan delete
                              */
    
                              

    Pada method getCount(),getData(), getAllData() dan execute(), harus memasukkan query terlebih dahulu dengan method setQuery(), dan periksa input user secara manual seperti petik satu ', #hastag,

    Pada method insert(),update(), delete() dan checkId(), tidak membutuhkan method setQuery(), dan untuk petik satu ', sudah otomatis, anda hanya tinggal periksa string yang lain seperti #hastag,


    Untuk memasukkan model kedalam Router, dapat menggunakan cara seperti ini

                                GF::Route("contoh-memasukkan-model",function(){
                                     $obj = GF::Model("Model-Satu");
                                });
                            

    atau langsung membuat object baru

                                GF::Route("contoh-memasukkan-model",function(){
                                     $obj = new Data_User();
                                });
                            

    Berikut ini adalah cara untuk mengelola data kedatabase menggunakan PDO

    Pertama membuat class terlebih dahulu, extends elDB,lalu masukkan attribut

                              private $id_user;
                              private $username;
                              private $email;
                              private $password;
                            

    Contoh menambahkan data

                                public function addData()
                                {
                                  self::beginTransaction();
                                  self::query('insert into t_user(username,email,pass) VALUES(:username, :email, :pass)');
    
                                  self::bind(':username', $this->username);
                                  self::bind(':email',  $this->email);
                                  self::bind(':pass',   $this->password);
    
                                  $r = self::execute();
                                  self::endTransaction();
                                  return $r;
                                }
                            

    Conth mengubah data

                        public function updateData()
                        {
                          self::query('update t_user set username=:username,email=:email,pass=:pass where id_user=:id_user');
                          self::bind(':id_user',   $this->id_user );
                          self::bind(':username',  $this->username );
                          self::bind(':email',     $this->email );
                          self::bind(':pass',      $this->password );
                          $r = self::execute();
                          return $r;
                        }
                    

    Contoh menghapus data

        public function deleteData()
      {
        self::query('delete from t_user where id_user=:id_user');
        self::bind(':id_user', $this->id_user);
        $r= self::execute();
        return $r;
      }
    
      

    Contoh mendapatkan data single dari tabel

        public function getDataUserSingle()
        {
          self::query("SELECT username FROM t_user WHERE username = :username limit 10");
          self::bind(':username', $this->username);
          $row = self::single();
          return $row;
        }
      

    Contoh mendapatkan semua data dari tabel

       public function getAllUser()
      {
        self::query('SELECT * FROM t_user limit 20');
        $row = self::resultset();
        return $row;
      }
      

    6. Cara Membuat Controller#back to top

    Untuk mengalihkan route kedalam controller, sebagai contoh class User_Controller

                                  class User_Controller
                                  {
                                      function __construct()
                                      {
                                          $this->login();
                                      }
    
                                      public function login(){
                                          echo "User Login";
                                      }
                                  }
                              
    Dan untuk memanggil class User_Controller diatas didalam route contoh "localhost/GF/example"
                                  GF::Route("example",function(){
                                      $user = new User_Controller();
                                  });
                              
    atau seperti berikut
                                GF::RouteToController("example","User_Controller");
                              
    maka kedua kode ditas akan memanggil constructor secara otomatis, atau bisa juga seperti ini
                                GF::RouteToController("example","User_Controller","login");
                              
    akan memanggil function login didalam class User_Controller
    Atau menggunakan callback function
                                  GF::RouteToController("example","User_Controller",function($obj){
                                        $obj->login();
                                  });
                                
    Untuk memanggil view didalam controller, pertama harus mendeklarasikan namespace 'use System\GF_Router as GF', contoh
                              use System\GF_Router as GF;
    
                                  class User_Controller
                                  {
    
                                    function __construct()
                                    {
                                        $this->login();
                                        GF::setView("login");
                                    }
    
                                    public function login(){
                                      echo "User Login";
                                    }
                              }
                            
    Maka pada saat Controller dipanggil akan memanggil function login dan mengalihkan kehalaman view "login";
    Contoh Salah -> GF::RouteToController("example/{ a } / { b }"), Method Controller tidak dapat dimasukkan parameter seperti Route

    7. Cara Membuat View#back to top

    Untuk membuat view pada lokasi "app/view/contoh.php" GF akan otomatis mencari ekstensi .php dan .html, jika .php tidak ditemukan maka akan mencari .html

                                GF::setView("contoh");
                              
    atau file diletakkan didalam folder, sehingga
                                  GF::setView("folder_user/contoh");
                              
    dan untuk mengekstrak variabel dari array gunakan kode seperti berikut
                                    $data_array['username'] = "abcdef";
                                    $data_array['email']    = "abcdef@gmail.com";
                                    GF::setView("contoh",$data_array);
                              
    atau mengekstrak variabel dari 2 array gunakan kode seperti berikut
                                    $data_array['username'] = "abcdef";
                                    $data_array['email']    = "abcdef@gmail.com";
    
                                    $result['login'] = true;
                                    GF::setView("contoh",$data_array,$result);
    
                              
    Untuk menambahkan halaman statis file bisa menggunakan kode seperti berikut
                                GF::setHead("template/head");
                                GF::setView("contoh-satu");
                              
    Maka penjelasan kode diatas, akan memasukkan file di "app/view/template/head.php" sebelum memasukkan file "app/view/contoh-satu.php".
    Lihat contoh di Router Empat

    8. NameSpace Framework#back to top

    Namespace yang digunakan untuk framework ini adalah :

                                  // Name space untuk Router
                                  use System\GF_Router as GF;
    
                                  // Name space untuk File
                                  use System\GF_File as File;
    
                                  // Name space untuk single/multiple upload file/gambar
                                  use System\GF_Upload as Upload;
    
                                  // Name space untuk request POST form input, lihat contoh di router-empat
                                  use System\GF_Post as Req;
    
                                  // Name space untuk Json
                                  use GF_Text\JSON_Generator as Json;
    
                                  // Name space untuk Captcha Generator Sederhana
                                  use GF_Text\Captcha_Generator_Simple as Captcha;
    
                                  // Name space untuk Captcha Generator Penjumlahan
                                  use GF_Text\Captcha_Generator_Sum as Captcha_Two;
    
                                  // Name space untuk XML (Membaca file xml)
                                  use GF_Text\GF_Xml as XML;
    	
    							   // Name space untuk encrypt decrypt Key Hash Iv
                                  use System\GF_Encrypt_Decrypt as Crypto;
    
                            
    Bila anda belum paham apa itu namespace, lihat di sini

    9. Library #back to top

    Berikut libary dari programmer lain yang telah tersedia di framework ini dan siap pakai serta terdapat contoh cara menggunakannya. Gunakanlah library-library berikut ini dengan bijak, utamakan untuk membaca dokumentasi masing-masing library terutama pada bagian LICENSE.

    1. Server Side (PHP)

    2. Client Side (CSS)

    3. Client Side (Library Javascript)

    3. Tambahan

    9. Tambahan#back to top

    * new Contoh untuk membuat encrypt dengan Key dan Hash (Lihat contoh lengkap di Router Lima)

    
    use System\GF_Encrypt_Decrypt as Crypto;
    GF::Route("crypthograpy-php",function(){
    
    	/**
    	 * Hanya contoh jika ingin mengencrypt
    	 * String dengan menggunakan Key dan Hash
    	 */
    
    	$obj = new Crypto;
    
    	// Memasukkan secret key
    	$obj->setKey('My_Secret_Key_ABCD');
    
    	// Menentukan jenis Hash yang akan digunakan
    	// Jika ingin melihat semuah jenis Hash gunakan method ini
    	// $obj->getAllHash();
    	$obj->setHasType('tiger160,4');
    
    	// Memasukkan string yang akan diencrypt
    	$obj->setValue("Garuda Framework Professional Edition...");
    
    	$result = $obj->encrypt();
    
    	echo "Hasil Encrypt : ".$result."
    "; // ============================================ $new_obj = new Crypto; // Memasukkan secret key $new_obj->setKey("My_Secret_Key_ABCD"); // Menentukan jenis Hash yang akan digunakan // Jika ingin melihat semuah jenis Hash gunakan method ini // $obj->getAllHash(); $obj->setHasType('tiger160,4'); // Memasukkan string yang akan didecrypt $obj->setValue($result); $result = $obj->decrypt(); echo "Hasil Decrypt : ".$result."
    "; echo "Key : My_Secret_Key_ABCD
    "; echo "Hash : tiger160,4
    "; echo "Semua jenis HASH :

    "; echo json_encode($obj->getAllHash()); });

    * new Contoh upload multiple file (Lihat contoh lengkap di Router Lima)

    use System\GF_Upload as Upload;
    
    /**
     * Contoh melakukan upload multiple
     * localhost/GF/process-multiple-upload
     */
    GF::Route("process-multiple-upload",function(){
    
    	if (isset($_FILES) && isset($_POST['submit']))
    	{
    		 /**
    		  * Function untuk mengaktifkan multi upload 
    		  */
    		 Upload::setMultipleUpload();
    
    		 /**
    		  * Apabila file yang akan diupload adalah gambar, maka aktifkan function ini
    		  * Upload::setImageOnly();
    		  */
    		
    		/**
    		 * Apabila file yang akan diupload adalah gambar, dan ingin dicompress, gunakan function ini
    		 * Upload::setCompressImage(50);
    		 */
    		
    
    		 /**
    		  * Untuk menentukan direktori tempat upload file (direktori akan otomatis dibuat jika ditemukan)
    		  * app/storage/multiple
    		  */
    		 Upload::setPath('multiple');
    		
    		 /**
    		  * Memasukkan nama-nama file yang akan diupload (jumlahnya harus sama dengan nama-nama dari form), jika ingin menggunakan nama 
    		  * file yang asli maka hapus function ini
    		  * @var array
    		  */
    		 $filename = array(
    		 				  _randomStr(5),
    		 				  _randomStr(5),
    		 				  _randomStr(5),
    		 				  _randomStr(5),
    		 				  _randomStr(5),
    		 				  _randomStr(5),
    		 				  _randomStr(5)
    		 				);
    		 Upload::setFileName($filename);
    
    		 /**
    		  * Memasukkan nama-nama dari form upload yang akan diupload
    		  * @var array
    		  */
    		 $data = array("file_1","file_2","file_3","file_4","file_5","file_6","file_7");
    		 Upload::setFileUpload($data);
    
    		 /**
    		  * Memasukkan maximum file upload
    		  * 1.3 MB
    		  */
    		 Upload::setMaxSize(1300000);
    
    		 /**
    		  * Melakukan upload
    		  * return array
    		  */
    		 $result = Upload::do();
    
    		 echo json_encode($result);
    	}else{
    		echo "404";
    	}
    });
    
        						

    * new Untuk membuat API (application programming interface), maka bisa menggunakan contoh berikut ini :

                                <-?phpp
                                use System\GF_Router as GF;
     
                                // Gunakan method enabledApi() ini, untuk mengaktifkan mode API,
                                // Agar URL kita bisa diakses oleh publik
                                GF::enabledApi();
                                 
                                GF::Route("API_USER",function(){
                                    echo "Route ini akan menjadi public, dapat diakses oleh publik";
                                });
                                 
                                 
                                // Sedangkan untuk mengembalikan seperti semula dalam artian menjadi private,
                                // Gunakan method ini disabledApi()
                                GF::disabledApi();
                                 
                                 
                                GF::Route("profile",function(){
                                    echo "Route ini akan menjadi private, tidak dapat diakses oleh publik";
                                });
                                

    Maka dengan begitu pada saat mengakses "www.example.com/API_USER", maka dapat diakses oleh publik, karena header sudah di setting menjadi " Access Control Allow Origin: * ", sedangkan pada saat mengakses "www.example.com/profile", maka hanya dapat diakses oleh domain itu saja karena sudah diatur headernya menjadi " Access Control Allow Origin: www.example.com/profile " dan " Access-Control-Allow-Credentials: true ".



    Untuk custom string anda bisa gunakan method dibawah ini (lihat contoh di Router-Delapan), fungsi dari custom string ini yaitu untuk membuat filter pada string yang diterima, misal jika ingin menangkap input dari user hanya number atau angka maka gunakan _setNumber(), atau jika hanya ingin alfabet saja dari A sampai Z gunakan _setAlfabet()

                                    $name   =  _setAlfabet($get['name']) ?? false;
                                    $email  =  _setCustomString($get['email'],"a-zA-Z0-9@.") ?? false;
                                    $phone  =  _setNumber($get['phone']) ?? false;
                                
  • Helper bawaan dari GF Pro bisa dilihat di "System/GF_Helper.php", disana terdapat beberapa function yang siap digunakan

  • Untuk template HTML anda bisa menggunakan cara saya, atau bisa juga kustom sendiri, atau gunakan cara anda seperti biasanya. contoh saya menggunakan front end bootstrap , jquery , dan GF-1.js, Lihat lokasi file di "System/GF_HTML.php"
  • Contoh template HTML yang saya gunakan, untuk mepersingkat kode :
                                        // Membuat Object
                                        $me = new Template_HTML;
    
                                        // Membuat Judul HTML
                                        $me->setTitle("Home");
    
                                        /*
                                        * Memasukkan Informasi Meta image,author,title,description,name,copyright
                                        */
    
                                        $meta_html['image']     = 'example.png';
                                        $meta_html['author']    = 'Lamhot Simamora';
                                        $meta_html['title']     = 'Home';
                                        $meta_html['description']   = 'Garuda Framework Pro';
                                        $meta_html['name']          = 'Garuda Framework Pro';
                                        $meta_html['copyright']     = 'Copyright@2017 All Right Reserved';
    
                                        // Menyimpan Meta
                                        $me->setMeta($meta_html);
                                        // Memasukkan CSS jika ada
                                        $me->setCSS("");
                                        // Mengeluarkan hasil / output
                                        $me->render();
    
                                        // dan terakhir penutup HTMl
                                        _closeBody();
    
                                      
  • Untuk mengatur nama folder / direktori berada pada "System/GF_Path.php"
  • $GF_PATH    = array(
              'GF_DIR_NAME'       => substr(dirname($_SERVER['PHP_SELF'])
                            ,strrpos(dirname($_SERVER['PHP_SELF']),'/') + 1), 
              /*
              * Nama File
              */
              'GF_System'         => 'GF_System',
              'GF_Text'           => 'GF_Text',
              'GF_Production'     => 'GF_Production',
              'GF_Helper'         => 'GF_Helper',
              'GF_Image_Error'    => 'GF-error',
              'GF_Anonymous'      => 'GF_Anonymous',
              'GF_Html'           => 'GF_HTML',
              'GF_Index'          => 'index',
              'GF_Interface'      => 'GF_Interface',
              'GF_404'            => '404',
              'GF_Query'          => 'GF_Query',
              'GF_CMD'            => 'GF_Command_Prompt',
              
              /*
              *  Nama Direktori
              */
              'GF_Config_DIR'     => 'config/',
              'GF_System_DIR'     => 'system/',
              'GF_Storage_DIR'    => 'storage/',
              'GF_APP_DIR'        => 'app/',
              'GF_Router_DIR'     => 'router/',
              'GF_Controlelr_DIR' => 'controller/',
              'GF_Helper_DIR'     => 'helper/',
              'GF_Library_DIR'    => 'library/',
              'GF_Model_DIR'      => 'model/',
              'GF_DB_DIR'         => 'database/',
              'GF_Config_DIR'     => 'config/',
              'GF_Language_DIR'   => 'language/',
              'GF_View_DIR'       => 'view/',
              'GF_External_DIR'   => 'external/',
    
              'GF_Error_View'     =>  'error/',
              'GF_Image_Base64'   =>  'image-base-64/'
                                );
                                    
  • Untuk mengalihkan ke halaman 404 page not found anda bisa menggunakan method berikut ini
  •                                       GF::errorPage();
                                      
  • Untuk mendirect ke halaman tertentu anda bisa gunakan code GF::directTo('Test'); sama dengan header('Location: http://www.example.com/Test');
  • Untuk library bawaan terdapat FPDF, QRCode, Mobile Detect dan PHP Mailer, sebagai contoh bisa dilihat di file 'app/router/Router-Satu.php'
  • Untuk penggunaan Javascript AJAX saya menggunakan GF-1.js, anda bisa menggunakan JQuery atau library yang lain, jika ingin melihat tutorial GF-1.js bisa dilihat di click

  • Selalu sertakan code berikut ini disetiap halaman, Router, Controller, Model ataupun View. Letakkan code di bagian paling atas. defined('sys_run_app') OR exit('403 You dont have permission to access / on this server...');
  •                                       
                                    
  • Setiap menambahkan direktory baru ! Apabila file index.php atau index.html tidak dibuat atau tidak digunakan, buat file index.php atau index.html, agar direktory tidak dapat di lihat. Maka buatlah file index.html atau index.php
  • Jika parameter URL tidak cocok dengan Router, maka akan otomatis dialihkan kehalaman "404.html"
  • Untuk halaman "404.html" dan "Maintenance.html", anda dapat lihat lokasinya di "app/view/error/"
  • Jika anda upload framework ini kehosting dan menggunakan HTTPS, maka pada bagian htaccess, menjadi seperti ini
  •                                   RewriteEngine On
                                      RewriteCond %{HTTPS} !on
                                      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    
                                      RewriteCond %{REQUEST_FILENAME} !-f
                                      RewriteCond %{REQUEST_FILENAME} !-d
                                      RewriteRule ^(.+)$ index.php?p=$1 [QSA,L]
    
                                    
  • Untuk membuat API sederhana, anda dapat melihat contohnya dihalaman Router Satu
  • Untuk upload file, jenis file yang tidak diizinkan untuk diupload bisa dikustom, lihat lokasinya di app/GF_System/ , dibagian class GF_File , cari kode seperti dibawah
  •                              private static $danger_file = array('.html','.php','.js','.exe','.php5','.php7','.htaccess');
                                   
    Untuk upload semua jenis file, anda bisa memasukkan jenis file apa yang tidak dapat diupload, dengan cara seperti berikut (Lihat contoh di Router-Dua)
                                     $file_format = array(".exe",".js",".txt");
                                      Upload::setDangerFile($file_format);
                                    
    Dan hal yang sama jika ingin upload untuk gambar, masukkan array kedalam method. (lihat contoh di Router-Lima)
                                          $image_format = array(".png",".jpg",".gif");
                                          Upload::setImageOnly($image_format);
                                    
  • Untuk membuat session menggunakan namespace use System\GF_Router as GF; lihat contoh berikut
  •                                 use System\GF_Router as GF;
    
                                    /**
                                     * Membuat session baru
                                     * @paramater {[key]}{[value]}
                                     * return boolean
                                     */
                                    GF::newSession("key","value");
    
                                    /**
                                     * Mengecheck session apakah ada atau tidak
                                     * @paramater {[key]}
                                     * return boolean
                                     */
                                    GF::checkSession("key");
    
                                     /**
                                     * Mendapatkan semua session yang ada
                                     * return array 
                                     */
                                    GF::getAllSession();
    
                                    /**
                                     * Mendapatkan session
                                     * @paramater {[key]}
                                     * return value 
                                     */
                                    GF::getSession("key");
    
                                    
                                    /**
                                     * Menghapus session
                                     * @paramater {[key]}
                                     * return boolean
                                     */
                                    GF::destroySession("key");
    
                                    
  • Untuk membuat cookie sama halnya dengan session harus menggunakan namespace use System\GF_Router as GF; lihat contoh berikut
  •                                 use System\GF_Router as GF;
    
                                    /**
                                     * Membuat cookie baru, anda bisa mengatur waktu cookie pada bagian parameter limit_time, contoh untuk membuat cookie dalam 2 hari
                                     * @paramater {[key]}{[value]}{[limit_time]}
                                     * return boolean
                                     */
                                    GF::newCookie("key","value",2);
    
                                    /**
                                     * Jika parameter limit_time di kosongkan, maka default adalah 1 hari
                                     */
                                    GF::newCookie("key","value");
    
                                    /**
                                     * Mendapatkan semua cookie yang ada pada aplikasi anda, Bukan pada komputer client
                                     * return boolean
                                     */
                                    GF::getAllCookie();
    
                                     /**
                                     * Mendapatkan cookie
                                     * @paramater {[key]}
                                     * return boolean
                                     */
                                    GF::getCookie("key");
    
                                     /**
                                     * Menghapus cookie
                                     * @paramater {[key]}
                                     * return boolean
                                     */
                                    GF::destroyCookie("key");
    
    
                                    
  • Untuk contoh penggunaan PDO lebih lengkap, lihat di Router 10 dan Model Empat.
  • Dan untuk penggunaan function atau pun lainnya, anda bisa lihat di Router yang tersedia. Karena yang dijelaskan di dokumentasi hanyalah bagian yang terpenting.
  • Untuk penggunaan captcha, anda bisa menggunakan captcha bawaan garuda framework, bisa dilihat contohnya di Router-Sembilan
  • Garuda Framework sudah support dengan SQlite 3, anda bisa menggunakan multi database sekaligus, mysql dan sqlite, Untuk contoh selengkapnya lihat di Router-Satu. Lokasi file "app/config/database/sqlite.php"
  • *new Contoh menggunakan database SQLite, menampilkan data dari tabel "t_user"

      // Memasukkan path / lokasi database
      $path = __EXTERNAL_DIR__."my_db.db";
      
      // Membuat objek baru
      $db = new GF_SQLite($path);
      
      // Memasukkan query untuk menampilkan data
      $db->setQuery("select * from t_user");
      
      // Memanggil function getAllData 
      $r = $db->getAllData();
      
      // Mengeluarkan hasil dalam bentuk JSON
      echo json_encode($r);
    
      $db->close();
    
    

    Contoh menggunakan database SQLite, memasukkan data ke tabel "t_user"

       // Memasukkan path / lokasi database
      $path = __EXTERNAL_DIR__."my_db.db";
      
       // Membuat objek baru
      $db = new GF_SQLite($path);
      
    
      $username = _randomStr(9);
      $email   = _randomStr(4)."@"._randomStr(3).".com";
      
      $r = $db->insert("t_user","username",$username
                                ,"email",$email);
    
      var_dump($r);
    
      $db->close();
    

    Contoh menggunakan database SQLite, membuat tabel baru "t_company"

      $path = __EXTERNAL_DIR__."my_db.db";
      $o = new GF_SQLite($path);
    
      $r = $o->execute("CREATE TABLE t_company (ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, ADDRESS CHAR(50))");
    
      var_dump($r);
    
      $o->close();
    
    Selengkapnya lihat contoh di Router-Satu

    Contoh parse XML dari sebuah file

    // Name space untuk XML
    use GF_Text\GF_Xml as XML;
    
    $file = __EXTERNAL_DIR__."example.xml";
    
      /**
       * Membuat object baru
       * @var XML
       */
      $o = new XML();
    
      /**
       * Memasukkan file XML, atau bisa juga dari URL 
       */
      $o->setXml($file);
    
      /**
       * Parse XML
       */
      $o->parseXml();
    
      // $o->getPath();
      // $o->getContent();
      // $o->getXml();
    
      /**
       * Mengambil hasil parse XML, dalam bentuk JSON
       */
      echo $o->getJson();
    
    Selengkapnya lihat contoh di Router-Satu dan Model Enam

    Contoh menggunakan database PostgreSql menampilkan data dari tabel "t_user"

      function __construct()
      {
        $this->obj = new GF_PostgreSql;
        $this->obj->setConnection($this->server_info);
        $this->obj->connect();
      }
    
      public function getAllDataUser()
      {
        $this->obj->setQuery("select * from t_user");
        $this->obj->execute();
    
        return $this->obj->getAllData();
      }
    
    Selengkapnya lihat contoh di Router-Tiga dan Model-Lima



  • Kekurangan Garuda Framework Pro :
    - Belum tersedia konfigurasi penggunaan Facebook Graph & Twitter Card
    - Belum tersedia sistem cache
    - Error handling masih sederhana
    - Support PDO tapi hanya MySql database
    - Belum tersedia Migration


  • SEKIAN DOKUMENTASI | SALAM VAR DUMP !