creativehandles / ch-contact-form
使用此包,我们可以轻松地在项目中实现联系表单。
Requires
- php: ^7.4|^8.0
- illuminate/support: ^8.0
Requires (Dev)
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-04 18:24:05 UTC
README
此包旨在通过简单的配置操作多个表单。此包包括带有附件的通知、文件上传、表单验证等。
安装
您可以通过composer安装此包。
composer require creativehandles/ch-contact-form
然后构建插件环境并发布其资源。
php artisan creativehandles:build-ch-contact-forms
用法
安装后,您可以在config目录下看到默认的ch-contact-form.php配置文件。这是此包最重要的部分。通过编辑此文件,您可以创建多个您想要的联系表单。
基本配置文件结构
以下是配置文件的基本结构。此文件主要包含两个重要部分:
1. 默认配置
2. 表单块
[
/** Default Values **/
'default' => [
'storage' => 'local',
'path' => 'temp',
'file_name' => md5(uniqid(time())),
'locale' => 'cs', // Set `Content-locale` header to override this value
],
/** END Default Values **/
/** START Form BLOCK Configuration */
'YOUR_FORM_NAME' => [ // 1
'recaptcha' => [..], // 2
'param' => [..], // 3
'attachments' => [..], // 4
'message_on' => [..], // 5
'notifications' => [..], // 6
];
/** END Form BLOCK Configuration*/
表单块配置
注意 - 当未提供相关值时,应用默认值。
YOUR_FORM_NAME
这是您的表单名称,它应该是唯一的值。当您通过API调用此表单时,您需要在请求的
form_name
参数下传递此键名,插件将选择相关的配置。
/** START Form BLOCK Configuration */
'YOUR_FORM_NAME' => [
//other configurations
];
/** END Form BLOCK Configuration*/
Recaptcha
此配置允许您在表单中添加google recaptcha
V2
、V3
验证。首先,您需要在您的应用中启用google recaptcha,在您的services.php
配置文件中提供以下配置。注意:您需要在您的应用中安装"google/recaptcha": "^1.2",
库才能使recaptcha正常工作。composer require google/recaptcha": "^1.2
config/services.php
'google' => [
'recaptcha' => [
'site_key' => env('GOOGLE_RECAPTCHA_SITE_KEY'),
'secret_key' => env('GOOGLE_RECAPTCHA_SECRET_KEY'),
'default_score_threshold' =>env('GOOGLE_RECAPTCHA_DEFAULT_SCORE_THRESHOLD'),
'default_challenge_timeout' => env('GOOGLE_RECAPTCHA_DEFAULT_CHALLENGE_TIMEOUT')
]
],
通过将enabled
设置为TRUE
,您可以在表单中启用recaptcha。然后,您需要添加以下值以使其正常工作,否则recaptcha将无法工作。action
值是您提供给recaptcha JS
库的值。在成功执行API调用后,google recaptcha将返回recaptcha token。然后,您需要将此token传递给插件以使用recaptcha验证表单。因此,后端需要识别包含在表单请求本身的token字段名称。您可以通过提供该字段名称在token_field
键下定义该字段。
默认情况下,recaptcha启用为V2
版本。如果您需要使用V3
版本,请将v3
提供在版本键下。
'recaptcha' =>[
'enabled' => false,
'action' => 'ACTION',
'token_field' => 'TOKEN_FIELD_NAME',
'version'=> null, //v2 or v3
]
参数
在此键下,您可以定义您的表单字段名称及其后端验证规则。您可以使用字段名称作为
key
,后端验证作为value
。
'param' => [
//'field_name' => 'FIELD_VALIDATION_RULES'
'name' => 'required|string',
'file' => 'sometimes|nullable|file|mimes:docx,doc,odt,pdf,jpeg,png',
],
附件
如果您的表单包含文件上传,您可以选择如何保存它。
'attachments' => [
/** START Attachment block */
[
'field' => 'FILE_UPLOAD_FIELD_NAME',
'save' => [
'file' => [
'name' => 'original',
'given_name' => null
],
'in' => [
'path' => null,
'disk' => null
],
]
/** END Attachment Block */
]
因此,您需要通过field
键传递请求文件上传表单字段的精确名称。为了确定如何保存此文件在您的存储中,您可以使用save
数组键。位于field
数组键下的name
键可以有三个主要值:random | given | original。其功能如下:
- random - 这将在保存文件时生成随机文件名
- original - 这将使用上传的文件名作为保存文件名
- given - 如果您选择此选项,您可以在
given_name
键下提供所需的名称作为保存文件名。如果没有提供,将应用默认文件名到在default->file_name
键下生成的文件。
'file' => [
'name' => 'original',
'given_name' => null
],
通过使用 in
数组键来确定保存文件的位置。您可以指定保存路径和磁盘。如果数组键值不存在,将应用默认值。
'in' => [
'path' => null,
'disk' => null
],
消息开启
当表单操作成功或失败时,将返回这些值。
'message_on' => [
'success' => 'Form Submission Successful',
'fail' => 'Form Submission Unsuccessful',
],
- 通知
您还可以使用此插件发送通知。因此,您需要添加通知配置块。
'notifications' => [
/** START Notification Block */
[
'name' => 'YOUR_NOTIFICATION_NAME_SPACE',
'notify' => [
'form_input' => true,
'values' => 'email'
],
'attachments' => [
[
'type' => 'url',
'link' => 'FILE_URL'
],
[
'type' => 'local',
'field' => 'FILE_NAME_FIELD_ON_REQUEST',
'disk' => 'FILE_SAVE_DISK',
'delete_on_success' => true,
'link' => null
],
]
]
/** END Notification Block */
]
您可以使用自己的通知类,因此您需要在 name
键下传递通知类命名空间。然后,您可以通过配置 notify
键来选择谁需要收到通知。
'notify' => [
'form_input' => true,
'values' => 'email'
],
如果您使用表单字段值作为通知,则需要将 form_input
键设置为 TRUE
,然后在 values
键下传递该表单字段名作为值。或者,您可以设置 form_input
为 FALSE
并通过逗号(,
)分隔提供一些电子邮件地址。
如果您计划通过通知发送一些附件,可以通过使用位于 notification
对象内的 attachments
对象来完成。还需要在通知的 notify
方法内调用以下方法,以便将附件添加到通知中。默认情况下,插件会将在通知构造方法中注入表单数据。
\Creativehandles\ChContactForm\ChContactFormFacade::pushAttachments($notify,$notification_data)
以下示例显示了邮件通知示例。
/** This is a Notification Class */
public $data; // form data injected by plugin
public function __construct(array $data)
{
$this->data = $data;
}
public function toMail($notifiable)
{
$mail = (new MailMessage)
->subject('Something')
->line('hello');
return \Creativehandles\ChContactForm\ChContactFormFacade::pushAttachments($mail,$this->data);
}
'attachments' => [
[
'type' => 'url',
'link' => 'FILE_URL'
],
[
'type' => 'local',
'field' => 'FILE_NAME_FIELD_ON_REQUEST',
'disk' => 'FILE_SAVE_DISK',
'delete_on_success' => true
],
]
您可以附加 表单输入文件
或 来自URL的外部文件
要附加表单请求输入文件,请执行以下配置:将
type
设置为local
,然后在field
键下提供表单字段名。然后在disk
键下提供文件保存磁盘。如果您希望在通知发送后从您的存储中删除文件附件,则将delete_on_success
设置为TRUE
。要附加来自外部URL的外部文件,请将
type
设置为url
。最后,在link
键下放置URL。
如何为创建的表单进行API调用
插件已提供API端点以调用您的表单。为了识别您的表单,您需要将表单名称作为请求参数传递,与请求一起传递。
端点 - BASE_URL/api/v1/forms
方法 - POST
标头 - Content-locale:YOUR_LOCAL
//未提供标头,将应用插件配置中的默认区域设置 表单参数 -
{
"form_name": "YOUR_FORM_NAME", //must include this
......other form fields.......
}
错误状态码
- 403 - 无效的Recaptcha
- 200 - 表单提交成功
- 422 - 验证错误
- 500 - 内部服务器错误
注意 - 通过提供内容区域设置标头,您可以将本地化通知传递。
完整配置文件
<?php
return [
/** Default Values **/
'default' => [
'storage' => 'local',
'path' => 'temp',
'file_name' => md5(uniqid(time())),
'locale' => 'cs' // Set `Content-locale` header to override this value
],
/** END Default Values **/
/** START Form BLOCK Configuration */
'YOUR_FORM_NAME' => [
'recaptcha' =>[
'enabled' => false,
'action' => 'ACTION',
'token_field' => 'TOKEN_FIELD_NAME',
'version'=> null, //v2 or v3 | By default v2
],
'param' => [
//'field_name' => 'FIELD_VALIDATION_RULES'
'name' => 'required|string',
],
'attachments' => [
/** START Attachment block */
[
'field' => 'FILE_UPLOAD_FIELD_NAME',
'save' => [
'file' => [
'name' => 'original', // random|original|given
'given_name' => null
],
'in' => [
'path' => null,
'disk' => null
],
]
/** END Attachment Block */
],
'message_on' => [
'success' => 'Form Submission Successful',
'fail' => 'Form Submission Unsuccessful',
],
'notifications' => [
/** START Notification Block */
[
'name' => 'YOUR_NOTIFICATION_NAMESPACE',
'notify' => [
'form_input' => true,
'values' => 'email'
],
'attachments' => [
[
'type' => 'url',
'link' => 'FILE_URL'
],
[
'type' => 'local',
'field' => 'FILE_NAME_FIELD_ON_REQUEST',
'disk' => 'FILE_SAVE_DISK',
'delete_on_success' => true,
'link' => null
],
]
]
/** END Notification Block */
],
]
/** END Form BLOCK Configuration*/
]
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献。
安全性
如果您发现任何安全相关的问题,请通过电子邮件kasun.eranda@creativehandles.com联系,而不是使用问题跟踪器。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。