headsnet / symfony-tools-bundle
适用于大型 Symfony 项目的工具和辅助功能
v0.3.0
2024-06-28 12:42 UTC
Requires
- php: >=8.2
- symfony/config: ^6.0 || ^7.0
- symfony/dependency-injection: ^6.0 || ^7.0
- symfony/event-dispatcher: ^6.0 || ^7.0
- symfony/form: ^6.0 || ^7.0
- symfony/http-kernel: ^6.0 || ^7.0
- symfony/lock: ^6.0 || ^7.0
- symfony/rate-limiter: ^6.0 || ^7.0
Requires (Dev)
- nyholm/symfony-bundle-test: ^3.0
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^10.0
- symplify/easy-coding-standard: ^12.2
README
Symfony 项目的有用工具和函数集合。
功能
安装
composer require headsnet/symfony-tools-bundle
如果您的 Symfony 安装没有自动注册包,请手动添加
// bundles.php return [ ... Headsnet\DoctrineToolsBundle\HeadsnetSymfonyToolsBundle::class => ['all' => true], ];
使用属性应用速率限制器
该包提供 PHP 属性,可用于应用 Symfony 速率限制器组件。
重要:速率限制器当前仅基于客户端 IP 地址。如果您位于 Cloudflare 等代理之后,您将需要处理访问 原始客户端 IP 地址。
首先,定义您想要使用的速率限制器
# config/packages/framework.yaml framework: rate_limiter: anonymous_api: policy: 'sliding_window' limit: 100 interval: '60 seconds'
然后,将注解添加到要保护的控制器,并在属性中指定速率限制器的名称
// src/Controllers/ApiController.php #[RateLimiting('anonymous_api')] #[Route('/create')] public function createAccount(): JsonResponse { // your controller logic... }
速率限制器 HTTP 头部
该包还提供了一个监听器,可以添加表示速率限制器状态的 HTTP 头部。例如。
rate-limit-limit: 1
rate-limit-remaining: 0
rate-limit-reset: -7
可以在包配置中禁用此功能
headsnet_symfony_tools: rate_limiting: use_headers: false
感谢 这篇 JoliCode 文章 提供的灵感!
将 Twig 模板存储在生产代码旁边
如我们在 博客 中所讨论的,通常将相关事物放在一起(内聚性)是很有吸引力的。您可能希望将此应用于您的 Twig 模板。
此包提供了一个编译器遍历,将自动搜索多个 Twig tpl
目录并将它们添加到 Twig 配置中。
必须通过设置 base_dir
选项在配置中启用此行为
headsnet_symfony_tools: twig: import_feature_dirs: base_dir: 'src/Feature'
然后,您可以使用以下语法引用位于生产代码目录中的 Twig 模板
@SendRegistrationEmail/hello.html.twig
@Billing->Invoicing->Create/invoice.html.twig
文本表单字段的空字符串默认值
默认情况下,Symfony 使用 null
作为文本表单字段的默认值。这导致代码库中到处都是 null
值。
修复此问题的简单方法是更改默认行为,使文本字段返回空字符串 ''
而不是 null
。然后,类属性可以类型化为 string
而不是 string|null
,这可以在客户端代码中消除大量的 null 检查。
这是一个有偏见的解决方案,因此必须在包配置中启用
headsnet_symfony_tools: forms: default_empty_string: true
在 <form> 元素上设置属性
该包提供了一个简单的方法来全局设置 <form>
元素的属性。
必须在配置中明确启用这些功能。
headsnet_symfony_tools: forms: disable_autocomplete: true # autocomplete="off" disable_validation: true # novalidate="novalidate"
许可证
在 MIT 许可证 下发布。