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.
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
- Naagaraa Mahasiswa Darma Persada dan Content Creator
- youtube channel
- official documentation on going
- PHP VERSION >= 7.3.2
- Install git-client atau cli
- Install php xdebug (optional)
- install composer
-
install phpxdebug (optional : agar pesan error debug menjadi rapih/ pretty )
-
clone myrepository mini dfv php native
git clone https://github.com/naagaraa/prosedural-php.git
-
composer install
prosedural-php > composer install
-
install phpxdebug (optional : agar pesan error debug menjadi rapih/ pretty )
-
buka terminal di htdocs pada xampp/laragon atau dir publicnya
PS C:\xampp\htdocs>
-
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
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
- #doc
- #img
- #.env
- #.env.example
- #.htaccess
- #index.php
folder apps adalah nanti dimana sebuah project small web dirancang, atau di atur mulai dari dcontroller, model dan view sebagai tampilannya.
folder config ini mengatur segala configurasi pada database mysqli, membuat constand dan menjalankan config untuk memanggil function connection database.
folder database ini adalah sebuah cheatsheet sintax mysqli
folder controller ini adalah bentuk prosedural functional programing
folder routes ini adalah untuk mengatur path atau arah routing pada apps
folder view ini adalah dimana hal yang berkaitan dengan html atau template yang akan di tampilkan pada halaman user
htaccess disini di set agar tidak bisa membuka folder corenya yaitu apps
autoload disini adalah untuk memanggil sebuah loading file pada folder config dengan urutan database yang pertama di require
untuk memanggil file config pada folder apps
folder public untuk meletakan asset seperti css, js dan image
folder storage adalah tempat file hasil upload disimpan
default akses remove index.php for first open atau ketika pertama dibuka
untuk memanggil file autoload.php
untuk config pada database diletakan pada file .env
DB_HOST=localhost
DB_PORT=3306
DB_NAME=namadatabasenya
DB_USER=userdatabasenya
DB_PASS=
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/
mendefiniskan arah route
# example :
# $router->get('pattern', function() {
# view("nama_view");
# });
$router->get('/', function() {
view("welcome");
});
$router->get('login', function() {
view("auth/login");
});
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";
}
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();
}
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();
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;
}
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>
untuk memanggil view lainnya bisa gunakan function view("nama_viewnya),
# example
<?php view("header") ?>
<p>some html code</p>
...
<?php view("footer")?>
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") ?>">
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>
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
untuk debug bisa menggunakan beberapa opsi berikut ini
- dd(valuenya);
- dump(valuenya);
- var_dump(valuenya);
- var_dump(valuenya);die;
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">
...
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
}
?>
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
}
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
- layout
<?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>