leocavalcante/siler
最新稳定版本:v1.7.9
Composer 安装命令:
composer require leocavalcante/siler
包简介
Siler is a set of general purpose high-level abstractions aiming an API for declarative programming in PHP.
README 文档
README
⚠️ I'm afraid that I'm not being able to keep Siler up-to-date as it deserves, so it's repository has been archived.
As an alternative for Siler, something lightweight and simple that works as a library with Swoole out-of-the-box, I highly recommend Nano! Check it out: https://nano.hyperf.wiki/#/en/
Siler is a set of general purpose high-level abstractions aiming an API for declarative programming in PHP.
- 💧 Files and functions as first-class citizens
- 🔋 Zero dependency, everything is on top of PHP built-in functions
- ⚡ Blazing fast, no additional overhead - benchmark 1, benchmark 2 and benchmark 3
Use with Swoole
Flat files and plain-old PHP functions rocking on a production-grade, high-performance, scalable, concurrent and non-blocking HTTP server.
Getting started
Installation
composer require leocavalcante/siler
That is it. Actually, Siler is a library, not a framework (maybe a micro-framework), the overall program flow of control is dictated by you. So, no hidden configs or predefined directory structures.
Hello, World!
use Siler\Functional as λ; // Just to be cool, don't use non-ASCII identifiers ;) use Siler\Route; Route\get('/', λ\puts('Hello, World!'));
Nothing more, nothing less. You don't need even tell Siler to run or something like that (puts works like a lazily evaluated echo).
JSON
use Siler\Route; use Siler\Http\Response; Route\get('/', fn() => Response\json(['message' => 'Hello, World!']));
The Response\json function will automatically add Content-type: application/json in the response headers.
Swoole
Siler provides first-class support for Swoole. You can regularly use Route, Request and Response modules for a Swoole HTTP server.
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
Install peer-dependency:
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
Another peer-dependency:
composer require doctrine/annotations
Then:
/** * @\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));
Object type name will be guessed from class name, same for field name, and it's return type (i.e.: PHP string scalar === GraphQL String scalar).
What is next?
License
- MIT license
- Copyright 2020 © LC
统计信息
- 总下载量: 66.93k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1125
- 点击次数: 1
- 依赖项目数: 4
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2016-12-02
