nagara/prosedural-php

PROSEDURAL PHP 项目

安装: 7

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

语言:CSS

类型:项目

1.0.2 2021-06-07 08:52 UTC

This package is auto-updated.

Last update: 2024-09-07 22:35:45 UTC


README

背景

本项目旨在为PHP原生mini MVC项目提供替代方案,mini MVC项目采用面向对象编程概念编写,并使用PDO(PHP数据对象)进行数据库连接。而prosedural php项目则采用过程式编程概念编写,并使用mysqli和对象进行数据库连接。其文件夹结构采用功能性的MVC模式。

对于新手

我在这个仓库中创建了我的文档学习。我不在乎你说了什么。如果你不喜欢或不认同我的编程概念,我无所谓,兄弟哈哈哈。如果这个仓库不能解决你的问题,那就意味着你的问题和我不同。请查看README.md中的描述,检查readme.md。你的问题一致吗?请readme

作者及贡献者

  • Naagaraa Darma Persada大学生及内容创作者
  • YouTube频道

文档

  • 官方文档正在制作中

如何使用/安装

要求
  • PHP版本 >= 7.3.2
  • 安装git客户端或cli
  • 安装php xdebug(可选)
  • 安装composer
使用git cli安装
  1. 安装 phpxdebug(可选:使错误调试信息更清晰)

  2. 克隆我的repository mini dfv php native

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

    prosedural-php > composer install
    
使用composer安装
  1. 安装 phpxdebug(可选:使错误调试信息更清晰)

  2. 在Xampp/Laragon的htdocs目录或public目录下打开终端


    PS C:\xampp\htdocs> 
    
  3. 安装项目


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

结构/架构

以下是我使用的文件夹结构风格

  • #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

简要说明

apps

文件夹apps是用于设计小型web项目的位置,或者从dcontroller、model和view开始进行设置。


config

文件夹config用于配置数据库mysqli,创建常量,并运行配置以调用数据库连接功能。


database

文件夹database是一个mysqli语法速查表。


controller

文件夹controller是过程式功能性编程的形式。

routes

文件夹routes用于配置apps中的路径或路由。


view

文件夹view是涉及HTML或模板的地方,这些模板将在用户页面上显示。


.htaccess

htaccess在此处设置,以防止打开核心文件夹即apps。


autoload.php

autoload用于调用config文件夹中的加载文件,首先require数据库。


init.php

用于调用apps文件夹中的config文件。


public

文件夹public用于放置资产,如css、js和图片。


storage

文件夹storage是用于保存上传文件的存储位置。


.htaccess

默认访问移除index.php以在首次打开或首次打开时显示


index.php

用于调用autoload.php文件

基本用法

连接数据库

数据库配置位于文件 .env 中


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


设置 URL 路径和应用程序

为了设置配置路径 URL 和应用程序,也存在于文件 .env 中


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

routes

定义路由方向

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


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

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

controller

在 apps > controller 文件夹中创建控制器名称,然后在该文件中创建函数

# example 

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

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

模型

创建模型以与数据库查询交互

# 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();
}

调用数据库连接

为了调用数据库连接,只需调用 function database() 并将其保存到变量中,调用连接将在交互查询和模型时需要。

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

在控制器中调用模型

要在控制器中调用模型,可以通过使用 function model("模型名") 加载模型文件来实现

# 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;
}

在视图中调用控制器

为了调用控制器并使用已声明的所有函数,可以在视图文件的最开始调用 controller("控制器名")

<?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>

调用其他视图

要调用其他视图,可以使用 function view("视图名")

# example

<?php view("header") ?>

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

调用资源

要调用 public 文件夹中的资源,请使用 function asset("资源名"),资源可以是 CSS、JS 文件或图像,通常在视图文件中调用。

# example 

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

调用 URL 路径

要调用 URL 路径,可以使用 function url("URL 名"),通常用于页面间导航,例如 http://domain/home,或 http://domain/about 等,其中 URL 路径已预先在路由中注册。

# 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>

调用时区函数

要调用时区函数,请打开 apps > config > timezone.php 文件,那里有一些我已创建的用于时间的函数

设置时区

date_default_timezone_set('Asia/Jakarta');

调用年份

year_now() // return tahun 2021

调试

以下是一些调试选项:

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

URL 路由参数

如果接受 URL 上的 slug 或参数(一个参数)

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

然后在视图文件中

# example

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

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

?>

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

如果接受 URL 上的 slug 或参数(多个参数)

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

然后在视图文件中

# example

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

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

?>

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

将 slug 传递给控制器

为了传递到控制器,在控制器文件中创建一个函数并传递参数,例如

web.php 路由文件

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

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">
...

penduduk.php 控制器文件

<?php

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

?>

将参数传递给模型

为了传递到模型文件,与控制器相同,加载模型然后通过控制器中存在的函数将其传递给模型函数

web.php 路由文件

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

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">
...

penduduk.php 控制器文件

<?php

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

  return get_user_data_by($id)
}

?>

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
}

创建模板或拆分模板

为了拆分 HTML 部分为多个部分,如 header、footer 和 content,这被称为模板化,为了创建模板,可以调用 function view

示例

view

  • 认证
    • 布局
      • header.php
      • footer.php
    • 页面
      • login.php
在放置视图文件之前,在视图文件开头加载控制器
<?php
# load controllernya
controller("loginController");
?>

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

# content here ...

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")?>

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>

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>