alvinios / miel
dev-main
2024-08-01 12:34 UTC
Requires
- php: >=8.1.0
- guzzlehttp/psr7: 2.6.x-dev
- nyholm/psr7-server: ^1.0
- php-extended/php-http-message-psr7: ^5.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
- psr/log: 3.x-dev
- twig/twig: ^3.0
Requires (Dev)
- monolog/monolog: 2.x-dev
- nyholm/psr7: ^1.8
- phpunit/phpunit: ^9.6
- symfony/error-handler: 6.0.x-dev
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-7 和 PSR-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
。
(返回顶部)