lamberski / mikrob
Requires
- erusev/parsedown: ^1.7
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]) ?>