这是一个用于网站和API的微框架。它是h.l的续作,专为PHP 8制作。


README

快速开始,使用静态页面和小型API

Packagist Tag PHP codecov StyleCI Scrutinizer Code Quality

文档

托管在Github pages上:https://alkemann.github.io/h2l/

要求

  • PHP 8.1

安装

  • 通过composer安装:composer require alkemann/h2l
  • 虽然你可以将库仅作为库使用,但它附带一个index.php文件。库附带3个骨架来帮助你开始,"min"基本上只包含index.php、最小的预期文件夹结构和hello world基本路由。你也可以使用"base",其中包含一个应用、一些基本CSS和配置文件。第三种是"example",其中包含一些更具有说明性的示例页面和动态路由。通过简单地将所选骨架文件夹内容复制到应用的根目录(可能是包含"vendor" composer的相同文件夹)进行安装:vendor/bin/skeleton base(使用文件和文件夹路由的自动魔幻网站)。还有更多其他骨架选项
    • min(裸骨头)
    • heroku_react(为插入即用的heroku应用设置,后端使用H2L,前端使用react-redux)
    • heroku_min(为插入即用的heroku应用设置,后端使用H2L)
    • api(没有自动路由,用于纯API应用和特定路由响应)
    • hyper(从Tailwind、alpine.js和HTMX开始,用于服务器端"SPA")

从骨架使用

  • 通过更改文件content/pages/home.html.php来更改主页
  • 将文件和文件夹添加到content/pages以添加固定路由内容
  • 将路由文件包含在webroot/index.php中或如果您安装了基础骨架,则添加到resources/configs/routes.php
  • 通过提供url的正则匹配和闭包处理程序来添加动态路由

一些示例路由

use alkemann\h2l\{Request, Router, Response, response\Json};

// Get task by id, i.e. GET http://example.com/api/tasks/12
Router::add(
  '|^api/tasks/(?<id>\d+)$|',
  function(Request $request): Response
  {
    $id = $request->param('id'); // from the regex matched url part
    $data_model = app\Task::get($id);
    return new Json($data_model); // since Task model implements \JsonSerializable
  }
);

// http://example.com/version
Router::add('version', function($r) {
	return new Json(['version' => '1.3']);
});

原始使用

一个最小的webroot\index.php可能看起来像这样

$root_path = realpath(dirname(dirname(__FILE__)));
require_once($root_path . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php');

use alkemann\h2l\{Environment, Dispatch};

Environment::setEnvironment(Environment::PROD);
Environment::set([
    'debug' => false,
    'layout_path'  => $root_path . 'layouts' . DIRECTORY_SEPARATOR,
    'content_path' => $root_path .  'pages' . DIRECTORY_SEPARATOR,
]);

$dispatch = new Dispatch($_REQUEST, $_SERVER, $_GET, $_POST);
$dispatch->setRouteFromRouter();
$response = $dispatch->response();
if ($response) echo $response->render();

测试

要运行测试,您必须检出仓库并在此README.md相同的文件夹中运行./bin/runtests

或者,要运行测试您的应用中包含的库,您还必须要求phpunit;composer require phpunit/phpunit然后您可以使用vendor/bin/testh2l运行h2l测试