nagara/prosedural-php

PROSEDURAL PHP PROJECT

Installs: 7

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

Language:CSS

Type:project

1.0.2 2021-06-07 08:52 UTC

This package is auto-updated.

Last update: 2024-04-07 21:34:39 UTC


README

Latar belakang

project ini dibuat untuk alternative dari mini mvc php native project, pada mini mvc itu ditulis dengan konsep object oriented programing dan type connectionnya menggunakan PDO atau PHP data obejct, namun untuk prosedural php project ditulis menggunakan consept prosedural dan type connectionnya menggunakan mysqli dan object. dengan structur foldernya mengadopsi pattern MVC mode view controller yang ditulis secara functional porgraming.

Untuk hatters

this repo i am making for my documentation learning. i dont care what u say. if you not like or not agree my consept programing i don't care bro hahaha. if this repo can't solve u problem, it mean u problem not same with me. and put documentation in description, check the readme.md. Is your problem agree ? pliss readme

Author dan Contribution

Documentation

  • official documentation on going

HOW TO USE / INSTALL

REQUIRETMENT
  • PHP VERSION >= 7.3.2
  • Install git-client atau cli
  • Install php xdebug (optional)
  • install composer
INSTALL menggunakan git cli
  1. install phpxdebug (optional : agar pesan error debug menjadi rapih/ pretty )

  2. clone myrepository mini dfv php native

    git clone https://github.com/naagaraa/prosedural-php.git
    
  3. composer install

    prosedural-php > composer install
    
INSTALL menggunakan composer
  1. install phpxdebug (optional : agar pesan error debug menjadi rapih/ pretty )

  2. buka terminal di htdocs pada xampp/laragon atau dir publicnya


    PS C:\xampp\htdocs> 
    
  3. install project


    ** PS C:\xampp\htdocs> composer create-project nagara/prosedural-php namaproject**
    PS C:\xampp\htdocs> composer create-project nagara/prosedural-php applikasi-saya

Structur / Arsitekture

oke berikut ini adalah gaya structur folder yang gue pakai

  • #apps
    • #config
    • #controller
    • #model
    • #view
    • #htaccess
    • #init.php
  • *#database
    • #error_vew.php
    • #function_error.php
  • #public
    • #css
    • #js
    • #image
  • #routes
    • #function
    • #getonvfile
    • #index
    • #routing
  • #storage
    • #pdf
    • #doc
    • #img
  • #.env
  • #.env.example
  • #.htaccess
  • #index.php

Penjelasan Singkat

apps

folder apps adalah nanti dimana sebuah project small web dirancang, atau di atur mulai dari dcontroller, model dan view sebagai tampilannya.


config

folder config ini mengatur segala configurasi pada database mysqli, membuat constand dan menjalankan config untuk memanggil function connection database.


database

folder database ini adalah sebuah cheatsheet sintax mysqli


controller

folder controller ini adalah bentuk prosedural functional programing

routes

folder routes ini adalah untuk mengatur path atau arah routing pada apps


view

folder view ini adalah dimana hal yang berkaitan dengan html atau template yang akan di tampilkan pada halaman user


.htaccess

htaccess disini di set agar tidak bisa membuka folder corenya yaitu apps


autoload.php

autoload disini adalah untuk memanggil sebuah loading file pada folder config dengan urutan database yang pertama di require


init.php

untuk memanggil file config pada folder apps


public

folder public untuk meletakan asset seperti css, js dan image


storage

folder storage adalah tempat file hasil upload disimpan


.htaccess

default akses remove index.php for first open atau ketika pertama dibuka


index.php

untuk memanggil file autoload.php

Basic Usage

connection database

untuk config pada database diletakan pada file .env


DB_HOST=localhost
DB_PORT=3306
DB_NAME=namadatabasenya
DB_USER=userdatabasenya
DB_PASS=


mengatur path url dan apps

untuk mengatur config path url dan apps juga terdapat pada file .env


# configurasi Path here 
APP_NAME=prosedural-php-native
APP_FOLDER=/prosedural-php-native/
APP_HOST=http://localhost/
APP_URL=http://localhost/prosedural-php-native/

routes

mendefiniskan arah route

# example :
# $router->get('pattern', function() {
#    view("nama_view");
# });


$router->get('/', function() {
    view("welcome");
});

$router->get('login', function() {
    view("auth/login");
});

controller

buat nama controllernya di folder apps > controller, lalu buat function function didalamnnya

# example 

function title()
{
   $title = 'home page';
   return $title;
}

/**
 * mencetak nilai string deskripsi
 * @return string
 */
function deskripsi()
{
  $deskripsi = "halaman home page";
}

model

buat model untuk berinteraksi dengan query database,

# example model

function get_all_data()
{
    # call connection ke database
    $conn = database();
    
    # query sintax pada database
    $sql = "SELECT * FROM users";
    
    # myqli execute
    $result = $conn->query($sql);

    #return data
    return $result->fetch_all(MYSQLI_ASSOC);
}

/**
 * docuemntations return singe data
 * @return object
 */

function get_single_data_by_condition($id)
{
    # call connection ke database
    $conn = database();

    # query sintax pada database
    $sql = "SELECT * FROM users WHERE id=$id ";

    # myqli execute
    $result = $conn->query($sql);

     #return data
    return $result->fetch_object();
}

memanggil connection database

untuk memanggil connection pada database , cukup panggil function database() dan save ke dalam variabel, memanggil connection akan dibutuhkan ketika berinteraksi query dan model .

# call connection ke database
$conn = database();

memanggil model pada controller

untuk memanggil model pada controller bisa dilakukan dengan melakukan load file model dengan function model("nama_modelnya");

# example controller user

function getDataUser()
{
  # load model di pada function
  model("userModel);

  # panggil function yang ada pada model  
  $data = get_all_data();

  # mengembalikan nilai
  return $data;
}

memanggil controller pada view

untuk memanggil pada controller dan menggunakan semua function yang sudah di deklarasi bisa melakukan call controller dengan function controller("namacontrollernya") di paling awal berkas view

<?php
# example

#load controller
controller("loginController") 


# next html code

?>

<!DOCTYPE html>
<html lang="en">

<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<head>

some code html here
...

</html>

memanggil view lainnya

untuk memanggil view lainnya bisa gunakan function view("nama_viewnya),

# example

<?php view("header") ?>

    <p>some html code</p>
    ...
 
<?php view("footer")?>

memanggil asset

untuk memanggil asset pada folder public gunakan function asset("namaassetnya"), asset bisa berupa berkas css, js, dan gambar biasanya di panggil pada berkas view.

# example 

<link rel="stylesheet" type="text/css" href="<?= asset("vendor/bootstrap/css/bootstrap.min.css") ?>">

memanggil arah url

untuk memanggil arah url bisa dilakukan dengan function url("nama-urlnya"), biasanya digunakan untuk navigasi antar halaman, example http://domain/home, atau http://domain/about dan lain lain. yang dimana arah urlnya didaftarkan pada routes terlebih dahulu.

# example

<ul type="none" class="navbar-nav">
    <li class="nav-item"><a href="<?= url("login") ?>">Login page</a></li>
    <li class="nav-item"><a href="<?= url("register") ?>">Login page</a></li>
    <li class="nav-item"><a href="<?= url("about") ?>">Login page</a></li>
    <li class="nav-item"><a href="<?= url("home") ?>">Login page</a></li>
</ul>

memanggil function timezone

untuk memanggil function timezone buka folder apps > config > timezone.php disana tersedia beberapa function yang sudah saya buat untuk waktu

mengatur zona waktu :

date_default_timezone_set('Asia/Jakarta');

memanggil tahun :

year_now() // return tahun 2021

debug

untuk debug bisa menggunakan beberapa opsi berikut ini

  • dd(valuenya);
  • dump(valuenya);
  • var_dump(valuenya);
  • var_dump(valuenya);die;

routing url parameter

jika menerima slug atau parameter pada url satu parameter

$router->get('data/{id}', function($id) {
    view("backend/penduduk", $id);
});

lalu pada berkas viewnya :

# example

<?php
# load controllernya
controller("pendudukController");

$parameter = $data;
dump($parameter[1]); // return id

?>

<!DOCTYPE html>
<html lang="en">
...

jika menerima slug atau parameter pada url lebih dari satu parameter

$router->get('data/{id}/{username}', function($id, $username) {
    view("backend/penduduk", [$id, $username]);
});

lalu pada berkas viewnya

# example

<?php
# load controllernya
controller("pendudukController");

$parameter = $data;
dump($parameter[0]); // return id
dump($parameter[1]); // return username

?>

<!DOCTYPE html>
<html lang="en">
...

passing slug ke controller

untuk memasingnya ke controller buat function pada berkas controllenya dan berikan paramter, contoh :

berkas pada routenya web.php

$router->get('data/{id}/{username}', function($id, $username) {
    view("backend/penduduk", [$id, $username]);
});

berkasi view penduduk.php

# example

<?php
# load controllernya
controller("pendudukController");

$parameter = $data;
dump($parameter[0]); // return debug id
dump($parameter[1]); // return debug username

#call function yang ada di dalam controllernya
getuserid($parameter[0]); // return id

?>

<!DOCTYPE html>
<html lang="en">
...

berkas controller penduduk.php

<?php

function getuserid($id)
{
  echo $id; // return id
}

?>

passing paramter ke model

untuk memasingnya ke dalam file model dari controller sama saja caranya load modelnya lalu pass melalui functionnya yang ada di controller ke function model

berkas pada routenya web.php

$router->get('data/{id}/{username}', function($id, $username) {
    view("backend/penduduk", [$id, $username]);
});

berkasi view penduduk.php

# example

<?php
# load controllernya
controller("pendudukController");

$parameter = $data;
dump($parameter[0]); // return debug id
dump($parameter[1]); // return debug username

#call function yang ada di dalam controllernya
getuserid($parameter[0]); // return id

?>

<!DOCTYPE html>
<html lang="en">
...

berkas controller penduduk.php

<?php

function getuserid($id)
{
  model("pendudukModel");  

  return get_user_data_by($id)
}

?>

berkas controller model penduduk.php

/**
 * docuemntations return singe data
 * @return object
 */

function get_user_data_by($id)
{
    $conn = database();

    // sintac query 
    $sql = "SELECT * FROM users WHERE id=$id ";
    $result = $conn->query($sql);
    return $result->fetch_object(); // return object
}

membuat templating atau memecah template

untuk memecah bagian HTML menjadi beberapa bagian seperti header, footer dan content, itu disebut templating, untuk membuat templating bisa memanggil function view

example :

view

  • auth
    • layout
      • header.php
      • footer.php
    • pages
      • login.php
controller di load di awal view sebelum meletakan berkas view
<?php
# load controllernya
controller("loginController");
?>

<!-- # load template header -->
<?= view("auth/layout/header")?>

# content here ...

berkas login.php

<!-- # load template header -->
<?= view("auth/layout/header")?>

<div class="limiter">
    <div class="container-login100">

        # content here ...

    </div>
</div>
<!-- # load template footer -->
<?= view("auth/layout/footer")?>

berkas header.php

<!DOCTYPE html>
<html lang="en">

<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<head>
	<title><?= title() ?></title>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
<!--===============================================================================================-->
	<link rel="icon" type="image/png" href="images/icons/favicon.ico"/>
<!--===============================================================================================-->
	<link rel="stylesheet" type="text/css" href="<?= asset("vendor/bootstrap/css/bootstrap.min.css") ?>">
<!--===============================================================================================-->
	<link rel="stylesheet" type="text/css" href="<?= asset("fonts/font-awesome-4.7.0/css/font-awesome.min.css") ?>">
<!--===============================================================================================-->
	<link rel="stylesheet" type="text/css" href="<?= asset("fonts/Linearicons-Free-v1.0.0/icon-font.min.css") ?>">
<!--===============================================================================================-->
	<link rel="stylesheet" type="text/css" href="<?= asset("vendor/animate/animate.css") ?>">
<!--===============================================================================================-->
	<link rel="stylesheet" type="text/css" href="<?= asset("vendor/css-hamburgers/hamburgers.min.css") ?>">
<!--===============================================================================================-->
	<link rel="stylesheet" type="text/css" href="<?= asset("vendor/animsition/css/animsition.min.css") ?>">
<!--===============================================================================================-->
	<link rel="stylesheet" type="text/css" href="<?= asset("vendor/select2/select2.min.css") ?>">
<!--===============================================================================================-->
	<link rel="stylesheet" type="text/css" href="<?= asset("vendor/daterangepicker/daterangepicker.css") ?>">
<!--===============================================================================================-->
	<link rel="stylesheet" type="text/css" href="<?= asset("css/util.css") ?>">
	<link rel="stylesheet" type="text/css" href="<?= asset("css/main.css") ?>">
<!--===============================================================================================-->
</head>
<body>

berkas footer.php

<!--===============================================================================================-->
<script src="<?= asset("vendor/jquery/jquery-3.2.1.min.js") ?>"></script>
<!--===============================================================================================-->
	<script src="<?= asset("vendor/animsition/js/animsition.min.js") ?>"></script>
<!--===============================================================================================-->
	<script src="<?= asset("vendor/bootstrap/js/popper.js") ?>"></script>
	<script src="<?= asset("vendor/bootstrap/js/bootstrap.min.js") ?>"></script>
<!--===============================================================================================-->
	<script src="<?= asset("vendor/select2/select2.min.js") ?>"></script>
<!--===============================================================================================-->
	<script src="<?= asset("vendor/daterangepicker/moment.min.js") ?>"></script>
	<script src="<?= asset("vendor/daterangepicker/daterangepicker.js") ?>"></script>
<!--===============================================================================================-->
	<script src="<?= asset("vendor/countdowntime/countdowntime.js") ?>"></script>
<!--===============================================================================================-->
	<script src="<?= asset("js/main.js") ?>"></script>
</body>

</html>