macrominds/website-lib

基于纯Markdown文件和YAML前端语法的简单网站库

v1.0.0 2023-09-17 09:43 UTC

README

使用此简单框架创建带有

本框架旨在提供灵活性,因此可能支持其他模板引擎、元数据和内容语言。目标是能够用json替换YAML,用Asciidoctor替换Markdown,用blade替换Twig等。

请参阅文档了解设置、使用和自定义信息。

扩展和自定义

您可以替换默认服务(见\Macrominds\AppServiceProvider)。

您可以通过将单例或多个对象工厂绑定到容器中来实现此操作。这样,您就可以覆盖设置或添加新的绑定。

use Macrominds\App;
use Macrominds\Processing\TemplateEngine\TemplateEngine;
use Symfony\Component\HttpFoundation\Request;

$app = new App(realpath(__DIR__ . '/..'));
$app->getContainer()->singleton(
    TemplateEngine::class,
    function(): TemplateEngine {
        return new MyVeryOwnTemplateEngine();
    }
);
$app->getContainer()->factoryObject(
    Request::class,
    function(): Request {
        return new MyCustomizedRequest(/*…*/);
    }
);

$app->getContainer()->resolve(Request::class)->myCustomRequestMethod();

一个示例用法是手动调试某个请求

use Macrominds\App;
use Symfony\Component\HttpFoundation\Request;

$app = new App(realpath(__DIR__ . '/..'));

// …

// always request /404.html
$app->getContainer()->factoryObject(Request::class, function() {
    return Request::create('/404.html');
});

测试此项目

运行 ./vendor/bin/phpunit 以运行测试。

要创建代码覆盖率报告,运行 ./code-coverage-report.sh。然后您可以通过访问report/coverage/index.html 来查看报告。

自动测试和Docker镜像

此项目提供了一个.gitlab-ci.yml文件,因此使用了GitLab CI/CD。

Docker镜像继承了macrominds/app php.df。这两个Docker文件都使用了构建参数来指定composer和php版本。

在本地构建Docker镜像

$ ./ci.bash build-all-local

在容器内运行phpunit

$ docker run -it --rm -v $(pwd):/var/www/html macrominds/website-lib:php73 vendor/bin/phpunit
$ docker run -it --rm -v $(pwd):/var/www/html macrominds/website-lib:php74 vendor/bin/phpunit
$ docker run -it --rm -v $(pwd):/var/www/html macrominds/website-lib:php80 vendor/bin/phpunit

为GitLab CI构建并发布镜像(也请参阅gitlab文档

$ ./ci.bash build-all-remotes-and-publish

代码质量

使用phpmetrics测量当前代码质量

$ ./phpmetrics-report.sh

待办事项

  • 支持symfony路由,为更复杂的网站提供更多功能,并在需要时动态添加单个资源路由
  • 对于块,与其使用<div class="block" markdown="1">,不如允许在内容文件中存在多个Markdown部分(例如,用---分隔)
  • 查看是否可以在Macrominds\TemplateEngine\Builder中删除标准IntlExtension并将其设置为可选的。它需要“ext-intl”,并非每个网站都需要。
  • 观察erusev/parsedownerusev/parsedown-extra上的活动不足,并决定是否应该切换到另一个库。thephpleague/commonmark看起来像是一个有希望的替代方案。