lamberski/mikrob

简单的网站引擎。

v1.4.1 2024-05-09 22:12 UTC

This package is auto-updated.

Last update: 2024-09-09 22:59:50 UTC


README

简单的网站引擎。

概述

安装 Composer 包

composer require lamberski/mikrob

创建 public/index.php 并粘贴

<?php

chdir('..');

require 'vendor/autoload.php';

print Mikrob\render_page();

然后启动服务器

php -S localhost:8080 -t public

在浏览器中打开时,脚本将根据 $_SERVER['REQUEST_URI'] 自动检测页面

  • localhost:8080 → pages/index.{json,php,md},
  • localhost:8080/about → pages/about.{json,php,md}.

render_page() 接受一个可选参数,可以显式地告诉它页面名称

render_page('/contact'); // to render pages/contact.{json,php,md}

也可以在 CLI 中生成页面

php index.php # to render page pages/index.php
php index.php --path=/terms # to render page pages/terms.{json,php,md}

页面

页面位于 pages 目录内。引擎将寻找三种类型的文件之一——JSON、PHP 和 Markdown。每个文件代表一个页面,其路径来自目录结构。 index.{json,php,md} 文件会进行特殊处理,从路径中删除 "index" 部分。

当 Mikrob 找到请求路径对应的文件时,它会读取其内容并将其传递给定义的 view 模板。

页面数据在视图中可通过 $page 访问。如果页面文件包含 description 属性,它将可通过 $page->description 访问。

JSON

{
    "view": "templates/product",
    "title": "Vacuum-o-matic 2000",
    "description": "Lorem ipsum dolor zamęt.",
    "tags": ["hobby", "travel", "music"]
}

PHP

这种类型在返回数据到视图之前进行一些计算或数据获取很有用。

<?php

return [
    'view' => 'page',
    'title' => 'Hello world!',
    'date' => '2019-03-07',
];

Markdown

每个 *.md 文件应包含两部分——基于 JSON 的元数据和用 Markdown 编写的页面主体。这种格式旨在用于内容丰富的页面和博客文章。Markdown 部分将在视图中作为 $page->body 访问。

---
{
    "view": "post",
    "title": "My first post",
    "published": "2022-10-20"
}
---

This is content of my **first post**. It's nice.

自定义页面顺序和路径

页面根据其路径按字母顺序排序。

要自定义顺序,可以在目录和文件名前加上数字(或时间戳)。例如。

pages/
└── blog/
    ├── 01-uno.md
    └── 02-dos.md

但这样,它就变成了 URL 的一部分: blog/01-uno.md 将可通过 /blog/01-uno 访问。

为了保持 URL 干净,可以使用 path 属性覆盖自动生成的路径。

{
    "path": "/blog/uno"
}

通配符页面

包含有效正则表达式的路径允许单个页面响应多个路径。Mikrob 首先尝试找到请求 URL 的直接匹配项。如果没有找到直接匹配项,它将然后根据通配符页面的 path 中定义的正则表达式评估 URL。

"未找到" 错误页面是一个好例子。要处理所有对不存在页面的请求并使用自定义 404 错误页面,在 /pages/404.json 创建一个 JSON 文件,内容如下

{
    "view": "templates/404",
    "path": "/.*/",
}

路径参数

Mikrob 支持使用 命名正则表达式组 来动态提取 URL 路径的段。这允许在 URL 中定义并利用变量部分作为应用程序内的参数。例如,您可以像这样为新闻分页配置路径参数

{
  "view": "templates/news",
  "path": "#/news(/page/(?<page>\\d+))#"
}

在这个例子中,URL 中的数字页面信息被捕获并分配给 page 参数。当您打开 /news/page/2 URL 时,"2" 将可通过 $page->params['page'] 访问。

重定向

您可以使用 redirect 属性创建一个只重定向到另一个位置的页面。此属性接受两个值:destination,表示要重定向到的 URL,以及 permanent,表示是否应使用 301 HTTP 代码进行重定向。

{
    "redirect": {
        "destination": "http://domain.com",
        "permanent": true,
    },
}

这将使页面可通过 /blog/uno 访问。

HTTP 状态

有时,你可能希望通知网页浏览器或搜索引擎页面具有特定的状态。

例如,在显示“未找到”页面时,你可以通过将status属性设置为404来发送404状态码。这将自动将状态码传输到浏览器。

{
    "view": "templates/404",
    "path": ".*",
    "status": 404,
}

视图

视图是位于views目录中的PHP文件。它们在页面中以view的形式被引用。

{
  "view": "templates/post"
}

在视图文件中,你可以定义页面的HTML结构,并用PHP代码进行糖衣包装(就像在旧的日子里一样)。

主页面视图包含一个$page变量,其中包含在页面文件中定义的所有属性。

你可以使用load_view(string $path, array $data = [])来包含其他视图(部分)。第二个参数对于传递给部分所需的任何值非常有用。

<?= Mikrob\load_view('partials/header', ['title' => $page->title]) ?>