bottledcode / swytch-framework
一个用于构建Web应用的PHP框架
v0.6.1
2023-12-31 19:51 UTC
Requires
- php: >=8.2
- ext-dom: *
- ext-intl: *
- ext-mbstring: *
- ext-sodium: *
- gettext/gettext: ^5.6
- gettext/translator: ^1.1
- laminas/laminas-escaper: ^2.12
- laminas/laminas-httphandlerrunner: ^2.5
- masterminds/html5: ^2.7
- nyholm/psr7: ^1.5
- nyholm/psr7-server: ^1.0
- olvlvl/composer-attribute-collector: ^2.0
- php-di/php-di: ^7.0
- psr/container: 2.0.2
- psr/http-message: ^1.1 || ^2.0
- symfony/property-access: ^7.0
- symfony/serializer: ^7.0
- withinboredom/response-code: ^1.0
Requires (Dev)
- infection/infection: ^0.27
- monolog/monolog: ^3.3
- pestphp/pest: ^2.5
- phpstan/phpstan: ^1.10
- roave/security-advisories: dev-latest
- spatie/pest-plugin-snapshots: ^2.0
Suggests
- monolog/monolog: For logging
- php-di/php-di: For dependency injection
- symfony/serializer: For state validation
README
Swytch框架是一个新生的但功能强大的框架,允许您将HTML与您的应用程序逻辑一起编写,包括API端点。它基于htmx进行浏览器端处理,并使用自定义的流式HTML5解析器来处理HTML和转义。
功能
- 将HTML与您的PHP代码一起编写,依靠上下文感知的转义。
- 将您的API逻辑靠近使用它的HTML。
- 通过HTML进行应用程序路由(类似于ReactRouter)。
- 自动CSRF保护。
- 上下文感知的转义。
- 自动HTML5验证。
- 授权和认证感知的路由和渲染。
- 浏览器缓存控制。
- 内置支持翻译。
注意:此软件目前处于预生产阶段,不建议用于生产环境。
示例应用
以下是一些使用Swytch框架的示例应用
Once
在once.getswytch.com上查看实时效果。这是一个秘密消息应用。
身份验证
此应用通过电子邮件发送密码提供简单的身份验证系统。它提供Kubernetes入口身份验证。
示例组件
#[\Bottledcode\SwytchFramework\Template\Attributes\Component('example')] class ExampleComponent { use \Bottledcode\SwytchFramework\Template\Traits\RegularPHP; use \Bottledcode\SwytchFramework\Template\Traits\Htmx; #[\Bottledcode\SwytchFramework\Router\Attributes\Route(\Bottledcode\SwytchFramework\Router\Method::POST, '/api/number')] public function getNumber(string $name, string $number): int { return $this->render($name, random_int(0, 100)); } public function render(string $name, int $number = null): string { $this->begin(); ?> <div> <h1>Hello, {<?= $name ?>}</h1> <form hx-post="/api/number"> <!-- CSRF protection is automatically added to forms --> <input type='hidden' name='name' value={<?= $name ?>} /> <p>Here is a random number: {<?= $number ?>}</p> <button type="submit">Generate a new random number</button> </form> </div> <?php return $this->end(); } }