comfyphp / core
使用ComfyPHP舒适地编写PHP
Requires
- php: >=8.0
README
为针对特定环境(如Internet Explorer或禁用JavaScript的环境)的开发者提供一个更好的开发环境。
框架目录结构
├── public
│ └── index.php
├── src
│ └── pages
│ ├── _document.php
│ └── index.php
├── .env.development.local
├── .env.development
├── .env.production.local
├── .env.production
├── .env.local
├── .env
└── comfy.config.php
使用前
ComfyPHP的必要依赖项
下载/安装
要使用此框架,您可以使用Composer安装它。
composer require comfyphp/core
基本的public/index.php格式
您可以在公共文件夹内创建index.php,如下例所示
<?php require_once __DIR__ . "/../vendor/autoload.php"; $core = new ComfyPHP\Core(); $router = $core->getRouter(); // search for index.php in src/pages (by default) $router->get("/", "./index"); // return json $router->get("/hello", function (): string { $response = [ "message" => "Hello, World!", ]; header("Content-Type: application/json"); return json_encode($response); }); $core->run();
或者只需将fileBasedRouter()函数添加到index.php中,以实现文件路由,这将在后面介绍。
<?php require_once __DIR__ . "/../vendor/autoload.php"; $core = new ComfyPHP\Core(); $core->fileBasedRouter(); $core->run();
基本的src/pages/_document.php格式
<!--%head%-->和<!--%body%-->都将作为正则表达式被替换为每个页面的<head>...</head>和<body>...</body>,在编辑文档时请勿删除。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" /> <!--%head%--> </head> <body> <!--%body%--> </body> </html>
基本的src/pages/page.php格式
在每个网页内部,有两个部分:<head>...</head>和<body>...</body>。您可以通过编辑来定制每个页面的head和body内容。但是,如果文件中缺少<head>...</head>和<body>...</body>部分,ComfyPHP将将其识别为API控制器,并提供从它捕获的所有结果。
<head> <!-- Place your head content here --> </head> <body> <!-- Place your body content here --> </body>
配置composer.json
您可以将composer.json配置为运行ComfyPHP脚本。
{
"scripts": {
"dev": ["Composer\\Config::disableProcessTimeout", "comfyphp dev"],
"build": ["comfyphp build"],
"preview": [
"Composer\\Config::disableProcessTimeout",
"comfyphp preview"
]
}
}
或手动运行命令
./vendor/bin/comfyphp {dev/build/preview}
开发模式
以开发环境启动应用程序
composer run dev
为生产构建
为生产服务器构建环境
composer run build
然后您可以使用apache/nginx来管理服务器。
生产模式预览
以生产环境启动应用程序
composer run preview
服务器端口
默认情况下,服务器将在https://:3000运行,您可以将端口参数添加到脚本中,以设置服务器端口
comfyphp dev -p 4000 comfyphp dev --port 4000 comfyphp preview -p 5000 comfyphp preview --port 5000
路由
有两种路由方法可供选择:基于函数的路由和基于文件的路由。您可以自由选择您偏好的任何方法。
基于函数的路由
当使用基于函数的路由时,ComfyPHP将自动在/src/pages中搜索一个与/public/index.php中提到的名称匹配的PHP文件。默认情况下,如果您输入get("/alphabet", "abc");,它将寻找/src/pages/abc.php。如果您没有创建具有相同名称的文件,它将返回无结果。此外,您还可以使用除get之外的其他方法,如post、put、patch、delete、head、options、trace和connect。
$core = new ComfyPHP\Core(); $router = $core->getRouter(); $router->get("/", "./index"); $router->get("/alphabet", "./abc");
基于文件的路由
要实现基于文件的路由,只需在/public/index.php中包含fileBasedRouter();。这使ComfyPHP在用户访问站点时能够在/src/pages目录内搜索。例如,当用户使用任何主要HTTP方法访问/settings/themes?abc=123时,ComfyPHP将在pages文件夹中寻找名为settings/themes.php的文件。如果不存在此类文件,ComfyPHP将搜索settings/themes/index.php。如果既没有创建themes.php也没有创建index.php文件,它将返回无结果。
$core = new ComfyPHP\Core(); $core->fileBasedRouter();
关于.env
要存储不同的环境变量,您可以创建多个.env文件,其优先级按以下顺序确定:
-
开发模式
.env.development.local>.env.development>.env.local>.env -
生产模式
.env.production.local>.env.production>.env.local>.env
示例
您可以在环境文件中添加不同的变量,如下例所示
COOKIE_DOMAIN="https://example.com"
处理后,您可以在页面中使用这些变量。
echo $_ENV["COOKIE_DOMAIN"];
404 错误处理
对于 404 错误,ComfyPHP 会向客户端发送一个 404 状态。您可以在 pages 文件夹中添加一个名为 _404.php 的文件。当客户端尝试访问路由器中找不到的页面时,此文件将作为错误处理页面。
工具函数
ComfyPHP 为您提供了一些有用的工具来简化项目构建。您可以查看它们。
但在使用之前,请别忘了初始化类。
$tools = new ComfyPHP\Tools();
useLog
此函数帮助您在 JavaScript 中打印 console.log 消息。
$log = $tools->useLog(); $log("Hello World!"); // or $tools->useLog("Hello World!"); // result: // <script>console.log("Hello World!")</script>
useError
此函数帮助您在 JavaScript 中打印 console.error 消息。
$err = $tools->useError(); $err("Goodbye World!"); // or $tools->useError("Goodbye World!"); // result: // <script>console.error("Hello World!")</script>
useFilter
此函数帮助您转义可能引起 XSS 攻击的特殊值。
$f = $tools->useFilter(); $f("<script>alert('hack')</script>"); // or $tools->useFilter("<script>alert('hack')</script>"); // result: // <script>alert('hack')</script>
ComfyPHP 保留变量
$_ENV["ENV"]; $GLOBALS["ROOT"]; $GLOBALS["CONFIG_VERSION"]; $GLOBALS["CONFIG_MINIMIZE"]; $GLOBALS["CONFIG_PAGE_PATH"]; $GLOBALS["SYSTEM_DEBUG"];
许可证
本项目采用 MIT 许可,您可以在此处找到许可证文件。