leocavalcante / siler
此包已废弃,不再维护。未建议替代包。
Siler 是一套通用的高层抽象,旨在为 PHP 提供声明式编程的 API。
v1.7.9
2021-01-27 19:18 UTC
Requires
- php: >=7.3 || >= 8.0
Requires (Dev)
- cboden/ratchet: ^0.4.1
- cocur/slugify: ^4.0
- doctrine/annotations: ^1.10
- doctrine/cache: ^1.10
- gabordemooij/redbean: ^5.5
- google/protobuf: ^3.12
- grpc/grpc: ^1.30
- laminas/laminas-config: ^3.4
- laminas/laminas-config-aggregator: ^1.3
- laminas/laminas-diactoros: ^2.2
- laminas/laminas-httphandlerrunner: ^1.1
- laminas/laminas-stratigility: ^3.2
- monolog/monolog: ^2.1
- phpunit/phpunit: ^9.2
- psr/event-dispatcher: ^1.0
- squizlabs/php_codesniffer: ^3.5
- swiftmailer/swiftmailer: ^6.2
- swoole/ide-helper: ^4.5
- textalk/websocket: ^1.2
- twig/twig: ^3.0
- vimeo/psalm: ^3.12 || ^4.0
- vlucas/phpdotenv: ^5.0
- webonyx/graphql-php: ^14.0
- dev-main
- v1.8.x-dev
- v1.7.9
- v1.7.8
- v1.7.7
- v1.7.6
- v1.7.5
- v1.7.4
- v1.7.3
- v1.7.2
- v1.7.1
- 1.7.0
- v1.6.0
- v1.5.3
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.0
- v1.3.0
- v1.2.0
- v1.1.0
- v1.0.1
- v1.0.0
- dev-dependabot/composer/main/vlucas/phpdotenv-5.4.1
- dev-dependabot/composer/main/doctrine/annotations-1.13.2
- dev-dependabot/composer/main/react/promise-2.9.0
- dev-dependabot/composer/main/vimeo/psalm-4.20.0
- dev-dependabot/composer/main/swoole/ide-helper-4.8.6
- dev-dependabot/composer/main/monolog/monolog-2.3.5
- dev-dependabot/composer/main/squizlabs/php_codesniffer-3.6.2
- dev-php-8.1
- dev-dependabot/composer/main/vlucas/phpdotenv-5.3.1
- dev-dependabot/composer/main/swoole/ide-helper-4.7.1
- dev-dependabot/composer/main/vimeo/psalm-4.8.1
- dev-dependabot/composer/main/doctrine/annotations-1.13.1
This package is auto-updated.
Last update: 2022-03-13 14:15:38 UTC
README
⚠️ 我很抱歉,我无法像期望的那样保持 Siler 的更新,因此它的仓库已被存档。
作为 Siler 的替代方案,我强烈推荐 Nano!一个轻量级且简单的库,与 Swoole 配合使用:https://nano.hyperf.wiki/#/en/
Siler 是一套通用的高层抽象,旨在为 PHP 提供声明式编程的 API。
与 Swoole 一起使用
平面文件和普通的 PHP 函数在一个生产级、高性能、可扩展、并发和非阻塞的 HTTP 服务器上运行。
入门
安装
composer require leocavalcante/siler
这就是全部。实际上,Siler 是一个库,而不是一个框架(可能是一个微型框架),整体程序流程由你控制。所以,没有隐藏的配置或预定义的目录结构。
你好,世界!
use Siler\Functional as λ; // Just to be cool, don't use non-ASCII identifiers ;) use Siler\Route; Route\get('/', λ\puts('Hello, World!'));
没有更多,也没有更少。你甚至不需要告诉 Siler 去运行或类似的东西(puts
的工作方式就像是一个惰性评估的 echo
)。
JSON
use Siler\Route; use Siler\Http\Response; Route\get('/', fn() => Response\json(['message' => 'Hello, World!']));
Response\json
函数将自动在响应头中添加 Content-type: application/json
。
Swoole
Siler 为 Swoole 提供了一等支持。你可以在 Swoole HTTP 服务器中定期使用 Route
、Request
和 Response
模块。
use Siler\Http\Response; use Siler\Route; use Siler\Swoole; $handler = function () { Route\get('/', fn() => Response\json('Hello, World!')); }; $port = 8000; echo "Listening on port $port\n"; Swoole\http($handler, $port)->start();
GraphQL
安装依赖项
composer require webonyx/graphql-php
Schema-first
type Query { hello: String }
use Siler\Route; use Siler\GraphQL; $type_defs = file_get_contents(__DIR__ . '/schema.graphql'); $resolvers = [ 'Query' => [ 'hello' => fn ($root, $args, $context, $info) => 'Hello, World!' ] ]; $schema = GraphQL\schema($type_defs, $resolvers); Route\post('/graphql', fn() => GraphQL\init($schema));
Code-first
另一个依赖项
composer require doctrine/annotations
然后
/** * @\Siler\GraphQL\Annotation\ObjectType() */ final class Query { /** * @\Siler\GraphQL\Annotation\Field() */ public static function hello($root, $args, $context, $info): string { return 'Hello, World!'; } }
use Siler\GraphQL; use Siler\Route; $schema = GraphQL\annotated([Query::class]); Route\post('/graphql', fn() => GraphQL\init($schema));
对象类型名称将从类名中猜测出来,字段名也是如此,以及它的返回类型(即:PHP string
标量 ===
GraphQL String
标量)。