comfyphp/core

使用ComfyPHP舒适地编写PHP

v2.0.1 2023-09-10 08:47 UTC

This package is auto-updated.

Last update: 2024-10-03 16:31:08 UTC


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之外的其他方法,如postputpatchdeleteheadoptionstraceconnect

$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:
// &lt;script&gt;alert(&apos;hack&apos;)&lt;/script&gt;

ComfyPHP 保留变量

$_ENV["ENV"];
$GLOBALS["ROOT"];
$GLOBALS["CONFIG_VERSION"];
$GLOBALS["CONFIG_MINIMIZE"];
$GLOBALS["CONFIG_PAGE_PATH"];
$GLOBALS["SYSTEM_DEBUG"];

许可证

本项目采用 MIT 许可,您可以在此处找到许可证文件。