alvinios/miel

dev-main 2024-08-01 12:34 UTC

This package is auto-updated.

Last update: 2024-10-01 12:50:14 UTC


README

关于项目

Miel 是一个面向对象的 PHP Web 开发微型框架(MIEL 代表微型 + 精美,法语中也有“蜂蜜”的意思)。它的目的是基于 精美对象 原则设计,这些原则来源于 Yegor Bugayenko。这意味着

  • 没有可变的类
  • 没有 null
  • 没有类型检查或反射
  • 没有 public static 方法或 constants
  • 没有配置文件
  • 没有 DI 容器

它受到了框架 Takes 的启发。为了运行,它需要您选择的 PSR-7PSR-17 实现/库。例如 Guzzle PSR-7

入门指南

composer require ..

快速入门

创建此 index.php 文件

use Alvinios\Miel\Http\Emit;
use Alvinios\Miel\Response\Text;
use Alvinios\Miel\Fork\{Regex, Routes};
use GuzzleHttp\Psr7\{HttpFactory,ServerRequest};

(new Emit())(
    (new Routes(
        new Regex('/', new Text('Hello world!'))
    ))->response(ServerRequest::fromGlobals(), new HttpFactory())
);

切换到您的 index.php 文件夹并运行 php 本地服务器

php -S localhost:8000

更大的例子

use Alvinios\Miel\Http\Emit;
use Alvinios\Miel\Endpoint\Base;
use Alvinios\Miel\Request\WithRegex;
use Alvinios\Miel\Response\{Json, Response, Text, Twig}; 
use Alvinios\Miel\Fork\{Routes, Regex, Methods};
use GuzzleHttp\Psr7\{HttpFactory, ServerRequest};
use Psr\Http\Message\ServerRequestInterface;

(new Emit())(
  (new Routes(
        new Regex('/', new Text('Hello world!')),
        new Regex(
            '/users/(?P<id>[\d]+)',
            new Methods(
                ['post'],
                new class() extends Base {
                    public function act(ServerRequestInterface $request): Response {
                        return new Json(
                            json_decode($request->getBody()->getContents())
                        );
                    }
                }         
            ),
            new Methods(
                ['get'],
                new class() extends Base {
                    public function act(ServerRequestInterface|WithRegex $request): Response {
                        return new Text(sprintf(
                            '<html><body>User %s</body></html>',
                            $request->regex()->group('id')
                        ));
                    }
                }      
            )
        )
  ))->response(ServerRequest::fromGlobals(), new HttpFactory())
);

生成器

路由可以作为 Routes 的可变参数或使用 Append 包装器通过 生成器 组合。

use Alvinios\Miel\Response\{Text, Twig}; 
use Alvinios\Miel\Fork\{Append, Routes, Regex};

 new Routes(
     new Append(
         call_user_func(function() : \Iterator {
             yield new Regex('^(/|/home)$', new Twig($this->twig, 'index.html.twig', []));
         }),
         call_user_func(function() : \Iterator {
             yield new Regex('/foo', new Text('Foo'));
             yield new Regex('/bar', new Text('Bar'));
         })
     )
)

中间件支持

您可以使用 PSR-15 中间件来保护路由/路由。这是如何做到的

use Alvinios\Miel\Response\Text; 
use Alvinios\Miel\Fork\{Fork, Shield};
use Psr\Http\Server\MiddlewareInterface;

new Shield(
    new Regex('/foo', new Text('Behind middleware')),
    new class() implements MiddlewareInterface {
       ...
    },
    new class() implements MiddlewareInterface {
       ...
    }
)

Shields 可以嵌套。

注意

目前它处于概念状态,尚未在生产环境中测试。

许可证

在 MIT 许可证下分发。有关更多信息,请参阅 LICENSE.txt

(返回顶部)