headsnet/symfony-tools-bundle

适用于大型 Symfony 项目的工具和辅助功能

v0.3.0 2024-06-28 12:42 UTC

This package is auto-updated.

Last update: 2024-08-28 13:01:29 UTC


README

Build Status Coverage Latest Stable Version Total Downloads License PHP Version Require

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 许可证 下发布。