ralusnom / captcha-bundle
Captcha捆绑包,基于Gregwar的Captcha
Requires
- php: >=7.1.3
- ext-gd: *
- gregwar/captcha: ^1.1.9
- symfony/form: ~5.0|~6.0|~7.0
- symfony/framework-bundle: ~5.0|~6.0|~7.0
- symfony/translation: ~5.0|^6.0|~7.0
- twig/twig: ^2.10|^3.0
Requires (Dev)
- phpstan/phpstan: ^0.12.66
- symplify/easy-coding-standard: ^6.1
This package is auto-updated.
Last update: 2024-09-30 01:49:14 UTC
README
GregwarCaptchaBundle
为Symfony表单组件添加了支持Captcha表单类型的支持。
它使用 gregwar/captcha 作为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:在public web文件夹中相对于captcha图像文件夹的名称,如果将as_file设置为true(默认="captcha")
- web_path:public web文件夹的绝对路径(默认='%kernel.project_dir%/public')
- gc_freq:垃圾收集的频率(1的分数,默认=100)
- expiration:Captcha图像文件的最大生存时间(分钟,默认=60)
您可以在全局范围内或在CaptchaType本身上定义以下配置选项
- width:Captcha图像的宽度(默认=120)
- height:Captcha图像的高度(默认=40)
- disabled:全局禁用CAPTCHAs(在开发环境中可能很有用),它仍然会出现,但不可编辑且不会检查
- length:Captcha的长度(字符数,默认 5)
- quality:CAPTCHA的jpeg质量(默认=30)
- charset:用于代码生成的字符集(默认=abcdefhjkmnprstuvwxyz23456789)
- font:要使用的字体(默认是预提供的某些字体中的随机选择),这应该是一个绝对路径
- keep_value:值将在表单提交之前保持相同,即使页面刷新也是如此(默认=true)
- as_file:如果设置为true,将创建一个图像文件而不是嵌入,以适应IE6/7(默认=false)
- as_url:如果设置为true,将使用图像标签中的URL,并处理Captcha生成。这可以在多服务器环境中使用,并支持IE6/7(默认=false)
- invalid_message:提交不匹配代码时显示的错误消息(默认="Bad code value",请参阅翻译部分以获取更多信息)
- bypass_code:始终验证CAPTCHA的代码(默认=null)
- whitelist_key:用于保持可以在Captcha存储中使用的会话键的会话键,当使用as_url时(默认=captcha_whitelist_key)
- reload:添加一个用于重新加载代码的链接
- humanity:用户在正确验证后可以提交的额外表单数,如果设置为非0值,则只有1/(1+humanity)个表单包含CAPTCHA(默认=0,即每个表单都包含CAPTCHA)
- distortion:启用或禁用图像上的扭曲(默认=true,启用)
- max_front_lines,max_behind_lines:在图像上绘制顶部/底部线条的最大数量。
0
将不绘制线条;null
将使用默认算法(线条数取决于图像的大小)。(默认=null) - 背景颜色:设置背景颜色,如果您想强制设置,这应该是一个包含r、g和b的数组,例如[255, 255, 255]将强制背景变为白色
- 背景图片:将自定义用户定义的图片设置为验证码背景(随机选择1张图片)。建议关闭图片上的所有效果(忽略所有效果)。必须传递图片的完整路径。
- 插值:启用或禁用在验证码上的插值
- 忽略所有效果:在设置背景图片时推荐使用,将禁用所有图片效果。
- session_key,如果您想在同一页面上托管多个CAPTCHA,您可能需要不同的session keys以确保那些不同表单的清晰短语得到适当的存储
示例
<?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
文件中添加bundle的路由配置
gregwar_captcha_routing: resource: "@GregwarCaptchaBundle/Resources/config/routing/routing.yml"
这将使用bundle的/generate-captcha/{key}
路由来处理生成。如果此路由与应用程序路由冲突,您可以在导入时为bundle的路由添加前缀
gregwar_captcha_routing: resource: "@GregwarCaptchaBundle/Resources/config/routing/routing.yml" prefix: /_gcb
由于session key包含在URL中,因此出于安全原因,它也被添加到另一个session数组中,在whitelist_key
键下
表单主题
小部件支持标准的Symfony主题,有关如何实现此内容的详细信息,请参阅文档
默认渲染为
{% block captcha_widget %} {% spaceless %} <img src="{{ captcha_code }}" title="captcha" width="{{ captcha_width }}" height="{{ captcha_height }}" /> {{ form_widget(form) }} {% endspaceless %} {% endblock %}
图片创建
如果您选择使用图片文件而不是嵌入小部件,小部件将随机执行垃圾回收并删除超过配置生存期的图片。
许可证
此bundle位于MIT许可证下。请参阅bundle中的完整许可证:LICENSE