short-edition / captcha-bundle
验证码包
Requires
- php: >=8.0.2
- ext-gd: *
- gregwar/captcha: ^1.2.1
- symfony/form: ~6.0|~7.0
- symfony/framework-bundle: ~6.0|~7.0
- symfony/translation: ~6.0|^7.0
- twig/twig: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.45
- phpstan/phpstan: ^1.10
- symplify/easy-coding-standard: ^12
This package is auto-updated.
Last update: 2024-09-08 08:14:26 UTC
README
GregwarCaptchaBundle
为 Symfony 表单组件添加了对验证码表单类型的支持。
它使用 gregwar/captcha 作为验证码生成器,这是一个独立的库,也可以用于非 Symfony 项目。
Symfony 兼容性
安装
步骤 1: 下载 GregwarCaptchaBundle
使用 composer require 下载并安装包。安装完成后,由于 Symfony 脚本,包将自动注册。
composer require gregwar/captcha-bundle
如果您不使用 flex,请手动注册
<?php // config/bundles.php return [ // ... Gregwar\CaptchaBundle\GregwarCaptchaBundle::class => ['all' => true] ];
配置
如果您需要自定义全局包配置,可以创建一个 /config/packages/gregwar_captcha.yaml
文件,包含您的配置
gregwar_captcha: width: 160 height: 50
使用方法
您可以使用以下方式在您的表单中使用 "captcha" 类型
<?php use Gregwar\CaptchaBundle\Type\CaptchaType; // ... $builder->add('captcha', CaptchaType::class); // That's all ! // ...
请注意,默认情况下,生成的图像将嵌入到 HTML 文档中,以避免处理路由和子请求。
选项
您可以全局定义以下配置选项
- image_folder:如果将 as_file 设置为 true,则 captcha 图像文件夹的名称相对于公共网络文件夹(默认="captcha")
- web_path:公共网络文件夹的绝对路径(默认='%kernel.project_dir%/public')
- gc_freq:垃圾回收的频率,以 1 的分数表示(默认=100)
- expiration:captcha 图像文件的最大生命周期(分钟)(默认=60)
您可以在全局或 CaptchaType 本身上定义以下配置选项
- width:captcha 图像的宽度(默认=120)
- height:captcha 图像的高度(默认=40)
- disabled:全局禁用 CAPTCHA(在开发环境中可能很有用),它仍然会出现,但不能编辑和检查
- length:captcha 的长度(字符数,默认 5)
- quality:captcha 的 jpeg 质量(默认=30)
- charset:用于代码生成的字符集(默认=abcdefhjkmnprstuvwxyz23456789)
- font:要使用的字体(默认是预提供字体中的随机字体),这应该是一个绝对路径
- keep_value:值将保持不变,直到表单提交,即使页面刷新(默认=true)
- as_file:如果设置为 true,将创建一个图像文件而不是嵌入,以满足 IE6/7 的要求(默认=false)
- as_url:如果设置为 true,则将在图像标签中使用 URL,并处理验证码生成。这可以在多服务器环境中使用,并支持 IE6/7(默认=false)
- invalid_message:提交不匹配代码时显示的错误信息(默认="Bad code value",请参阅翻译部分以获取更多信息)
- bypass_code:始终验证 captcha 的代码(默认=null)
- whitelist_key:用于保持可用于 captcha 存储的会话密钥的会话密钥,当使用 as_url 时(默认=captcha_whitelist_key)
- reload:添加一个链接来重新加载代码
- humanity:用户在正确验证后可以提交的额外表单数量,如果设置为非 0 的值,则只有超过 (1+humanity) 的表单包含 CAPTCHA(默认=0,即每个表单都包含 CAPTCHA)
- distortion:启用或禁用图像上的扭曲(默认=true,启用)
- max_front_lines 和 max_behind_lines:在图像上方/下方绘制最大行数。值为
0
将不绘制线条;值为null
将使用默认算法(行数取决于图像大小)。(默认=null) - background_color:设置背景颜色,如果您想强制设置,这应该是一个包含 r, g & b 的数组,例如 [255, 255, 255] 将强制背景为白色
- background_images:设置自定义用户定义的图像作为验证码背景(随机选择 1 张图像)。建议关闭图像上的所有效果(ignore_all_effects)。必须传递图像的完整路径。
- interpolation:启用或禁用验证码上的插值
- ignore_all_effects:在设置背景图像时建议使用,将禁用所有图像效果。
- session_key,如果您想在同一页面上托管多个 CAPTCHA,您可能需要不同的会话密钥以确保不同表单的清晰语句得到适当存储
示例
<?php use Gregwar\CaptchaBundle\Type\CaptchaType; // ... $builder->add('captcha', CaptchaType::class, array( 'width' => 200, 'height' => 50, 'length' => 6, ));
您也可以使用 config.yml
文件中的 gregwar_captcha
配置条目为您的整个应用程序设置这些选项
gregwar_captcha: width: 200 height: 50 length: 6
翻译
消息正在使用翻译器,您可以选择更改 invalid_message
选项或将其翻译。欢迎对语言的任何贡献!
作为 URL
要使用 URL 生成验证码图像,您必须将捆绑的路由配置添加到您的 config/routes.yaml
文件中
gregwar_captcha_routing: resource: "@GregwarCaptchaBundle/Resources/config/routing/routing.yml"
这将使用捆绑的 /generate-captcha/{key}
路由来处理生成。如果此路由与应用程序路由冲突,您可以在导入时为捆绑的路由添加前缀
gregwar_captcha_routing: resource: "@GregwarCaptchaBundle/Resources/config/routing/routing.yml" prefix: /_gcb
由于会话密钥通过 URL 传输,因此它也被添加到另一个会话数组中,在 whitelist_key
键下,出于安全考虑
表单主题
小部件支持标准的 Symfony 主题,有关如何实现此功能的详细信息,请参阅 文档
默认渲染是
{% block captcha_widget %} {% spaceless %} <img src="{{ captcha_code }}" title="captcha" width="{{ captcha_width }}" height="{{ captcha_height }}" /> {{ form_widget(form) }} {% endspaceless %} {% endblock %}
图像创建
如果您选择使用图像文件而不是嵌入小部件,则将随机执行垃圾收集并删除超出配置寿命的图像。
使用内部质量工具
vendor/bin/phpstan analyse
vendor/bin/ecs check .
许可
此捆绑软件位于 MIT 许可之下。请参阅捆绑中的完整许可:LICENSE