superframework/superframework

史上最快的可扩展项目框架

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

README

CRUDBooster 创作者的轻量级且快速的PHP框架

为什么选择 Super Framework?

我们采纳了 Laravel 框架的一些模式,并综合了我们在开发网页过程中最需要的所有最基本的功能(尤其是对我们而言)。因此,我们可以最大化框架的运行速度。

目录

安装

系统要求

在安装之前,请确保您的系统已满足以下要求

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

可选,但推荐

  • php Zend OPCache 扩展

安装命令

打开终端/命令提示符,在您已准备的文件夹中运行以下命令

$ composer create-project superframework/superframework my_new_super

如果您在安装过程中遇到由于 平台检查 问题导致的安装失败,尽管您的 PHP 版本兼容,您可以添加参数 --ignore-platform-reqs

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

[↑ 返回目录 ↑]

开始

环境配置 (.env)

请将 .env.example 文件复制为 .env。如果您的操作系统无法这样做,您可以使用以下命令

$ cp .env.example .env 

然后设置 .env 文件。

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

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

# DB_HOST biarkan localhost
DB_HOST=localhost

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

# DB_DATABASE isi dengan nama database proyek Anda
DB_DATABASE=super

# DB_USERNAME isi dengan user database 
DB_USERNAME=root

# DB_PASSWORD isi dengan password database
DB_PASSWORD=

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

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

[↑ 返回目录 ↑]

文件夹结构

在您使用此框架创建应用程序之前,您需要先了解 SuperFramework 的文件夹结构。

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

[↑ 返回目录 ↑]

/app

文件夹 app 包含应用程序的业务逻辑。这里将包含所有控制器、助手、模型等文件。

/bootstrap

文件夹 bootstrap 包含由系统生成的缓存文件。实际上,您不需要在此文件夹中添加或删除任何已生成的内容。

/configs

文件夹 configs 包含应用程序的基本设置文件。您可以在此处调整一些设置,但一些设置已经指向 .env 文件。

/logs

文件夹 logs 包含记录应用程序系统事件的 .log 文件,如错误和调试。

/public

此文件夹包含应用程序首次运行时使用的文件。包含 index.php 文件以及您存放 css/js 资产文件的目录。

/tasks

文件夹 tasks 包含将在 cronjob 中运行的计划任务文件。您可以复制现有的任务文件,并根据新的 cronjob 需求进行修改。

/vendor

文件夹 vendor 包含系统框架所需的各类库。您不需要手动更改或添加,因为它们已由 Composer 控制和管理。

[↑ 返回目录 ↑]

控制器 & 路由

创建控制器

打开您最喜欢的代码编辑器,在

app/Modules/Main/Controllers/TestController.php

然后根据以下格式填写控制器文件

<?php

namespace App\Modules\Main\Controllers;

use SuperFrameworkEngine\Foundation\Controller;

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

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

然后保存该文件。

请确保您创建的控制器文件名与上面命令中的名称完全一致

在您的项目根目录打开终端。然后运行以下命令

$ php super compile

上面的命令用于保存配置、路由和其他类的更改。

之后,您可以在浏览器中尝试它

example.com/test

或者如果使用localhost

localhost/projek_anda/public/test

[↑ 返回目录 ↑]

路由

在superframework中,路由直接在每个控制器类中设置。

路由类

路由类是指在上面的类名中设置的路由。通过路由类,您可以在控制器类中创建一个路由前缀。

<?php

namespace App\Modules\Main\Controllers;

use SuperFrameworkEngine\Foundation\Controller;

/**
 * @route test
 */
class TestController

因此,将得到

example.com/test

[↑ 返回目录 ↑]

路由方法

路由方法意味着您在每个方法上定义了路由。

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

因此,如果与上面的路由类结合,将得到

example.com/test/welcome

[↑ 返回目录 ↑]

带有参数的路由

您可以在URL中输入参数,并通过以下方式与您的方法进行匹配

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

不要忘记在获取更改之前运行以下命令

$ php super compile

[↑ 返回目录 ↑]

POST / GET

在superframework中,您不需要在每次路由时手动声明。因此,每个路由都可以作为GET或POST运行。如果您想验证用户发送的方法,则必须使用特定的助手,如下面的例子所示

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

[↑ 返回目录 ↑]

CLI(超级)

与laravel等其他框架一样,super framework也有artisan,名为super。使用方法如下

php super [command]

[↑ 返回目录 ↑]

文件系统

您可以使用以下FileSystem助手上传文件

在调用上述函数之前,请在上面的类控制器中放置以下use

use SuperFrameworkEngine\App\UtilFileSystem;

[↑ 返回目录 ↑]

会话

要使用session,请使用以下助手

[↑ 返回目录 ↑]

缓存

要使用缓存,请使用以下助手

[↑ 返回目录 ↑]

请求

在PHP原生中,您可能熟悉$_GET、$_POST、$_REQUEST,在此框架中,这些已经被重新包装为以下助手

[↑ 返回目录 ↑]

响应

要显示控制器输出,可以是json或view blade。

superframework的视图采用Laravel中“blade”的强大功能。因此,对于Laravel的用户来说,一定已经熟悉这个blade。您可以在此链接中阅读更多文档Blade

[↑ 返回目录 ↑]

验证

您可以使用以下类来验证用户请求

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

或更完整

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

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

以下是您可以使用的规则:requiredemailurlintunique:{table}exists:{table},{field}

[↑ 返回目录 ↑]

数据库ORM

要在superframework中创建查询,您可以使用内置的DATABASE ORM。

有关此函数的更详细的工作方式,您可以参考文件vendor/fherryfherry/super-framework-engine/src/App/UtilORM/ORM.php,但请勿直接修改此文件,因为您的更改将在更新时丢失。

[↑ 返回目录 ↑]

助手

以下是superframework中可用的助手

集合

您可以使用simple_collect函数将数组转换为collection,以便更容易地修改、过滤等。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[↑ 返回目录 ↑]

Firebase Cloud Message (FCM)

您可以使用以下类来发送FCM

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

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

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

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

[↑ 返回目录 ↑]

模型、仓库、服务

这是一个开发模式。我们建议在创建数据库查询时始终使用此模式。

模型

包含与表中列相对应的属性-属性。

仓库

您可以使用此仓库在应用程序中创建所有查询。

服务

您可以在服务类中创建具有特定逻辑的查询。

// Anda bisa menggunakan model class untuk query database

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

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

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

您只需在链的第一个步骤中添加query()即可。

[↑ 返回目录 ↑]

定时任务 / 调度程序

superframework中的cron job / scheduler功能使用Crunz/Schedule库。您可以在/tasks文件夹中创建一个新的PHP文件,内容如下

<?php

use Crunz\Schedule;

$schedule = new Schedule();

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

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

return $schedule;

然后您必须在Linux系统中的crontab中添加以下命令

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

[↑ 返回目录 ↑]

常见问题解答

在Nginx web服务器上安装项目到子文件夹,结果是404 Not Found

通常我们都需要在Nginx虚拟主机上编写特定的重写语法。并不是所有的语法都能直接工作,通常会出现404未找到错误。尝试以下来自Stack Overflow的解决方案: https://stackoverflow.com/a/61013994/934326

有用的库

以下是一些非常有用的库,可以支持您的应用程序开发。您可以将它们与superframework结合使用。

  1. CRUD Generator - 用于superframework的CRUD生成器 https://github.com/fherryfherry/crud-generator
  2. Simple HTML DOM Wrapper - PHP Dom https://github.com/Wikia/simplehtmldom
  3. PHPMailer - 邮件发送 https://github.com/PHPMailer/PHPMailer
  4. Imagine - 图片处理
    https://imagine.readthedocs.io/en/latest/index.html
  5. Snappy - PDF生成 https://github.com/KnpLabs/snappy
  6. PHPSpreadsheet - 电子表格XLS生成 https://phpspreadsheet.readthedocs.io/en/latest/
  7. Spout - XLS快速读写 https://opensource.box.com/spout/getting-started/
  8. DOMPDF - PDF生成 https://github.com/dompdf/dompdf

[↑ 返回目录 ↑]

支持与捐赠

嗨,感谢您使用我的开源项目,您可以通过以下方式支持我: https://saweria.co/ferryariawan 或通过 https://buymeacoffee.com/ferryariawan

联系方式

安全报告/漏洞/安全漏洞可以通过 ferdevelop15@gmail.com 发送

[↑ 返回目录 ↑]