superframework / superframework
史上最快的可扩展项目框架
Requires
- php: 7.3.*|7.4.*|8.0.*
- ext-curl: *
- ext-json: *
- ext-openssl: *
- ext-pdo: *
- fherryfherry/super-framework-engine: ^v1.1.0
This package is auto-updated.
Last update: 2024-09-14 11:42:08 UTC
README
CRUDBooster 创作者的轻量级且快速的PHP框架
为什么选择 Super Framework?
我们采纳了 Laravel 框架的一些模式,并综合了我们在开发网页过程中最需要的所有最基本的功能(尤其是对我们而言)。因此,我们可以最大化框架的运行速度。
目录
- 安装
- 开始
- 控制器 & 路由
- 命令行界面
- 文件系统
- 会话
- 缓存
- 请求
- 响应
- 验证
- 数据库 ORM / 查询构建器
- 助手
- 集合
- Firebase 云消息
- MRS 模式
- 定时任务 / 调度程序
- 有用的库
- 联系方式
安装
系统要求
在安装之前,请确保您的系统已满足以下要求
- 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']); }
以下是您可以使用的规则:required
、email
、url
、int
、unique:{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结合使用。
- CRUD Generator - 用于superframework的CRUD生成器 https://github.com/fherryfherry/crud-generator
- Simple HTML DOM Wrapper - PHP Dom https://github.com/Wikia/simplehtmldom
- PHPMailer - 邮件发送 https://github.com/PHPMailer/PHPMailer
- Imagine - 图片处理
https://imagine.readthedocs.io/en/latest/index.html - Snappy - PDF生成 https://github.com/KnpLabs/snappy
- PHPSpreadsheet - 电子表格XLS生成 https://phpspreadsheet.readthedocs.io/en/latest/
- Spout - XLS快速读写 https://opensource.box.com/spout/getting-started/
- DOMPDF - PDF生成 https://github.com/dompdf/dompdf
支持与捐赠
嗨,感谢您使用我的开源项目,您可以通过以下方式支持我: https://saweria.co/ferryariawan 或通过 https://buymeacoffee.com/ferryariawan
联系方式
安全报告/漏洞/安全漏洞可以通过 ferdevelop15@gmail.com 发送