该库提供了一个功能齐全的HTML表单构建器、验证器和垃圾邮件检查器。

v2.7.25 2024-09-05 18:56 UTC

README

该库提供了一个简单强大的HTML5表单构建器、验证器、垃圾邮件检查器、垃圾邮件提交者、表单内容邮件发送器等。

该库的设计考虑了最终用户,因此尽可能减少了输入,并且语法尽可能像HTML,同时增加了功能。

该库阻止来自除网站所在域名之外域的表单提交。它还默认保护免受跨站请求伪造攻击。

安装

使用composer安装

composer require truecastdesign/welder

需要PHP 5.5或更高版本。

用法

如何构建表单

创建一个新的实例

<?$F = new \Truecast\Welder?>

输出表单标签和其他隐藏字段

<?=$F->start('action=/html-php-page class=formClassName')?>

上面的代码将输出以下HTML

<form action="/html-php-page" method="post" class="formClassName" accept-charset="utf-8">
	<input type="hidden" name="authenticity_token" value="00c9f0fdca847c547ac0292d8d45e0e1ebcd5e395dffc4daf2a0b16420616cf2">
	<input type="hidden" name="form_action" value="submit">

文件上传

如果要在表单中使用文件上传,则需要将enctype设置为multipart/form-data。要设置它,请在start方法中传递file=true作为参数。

<?=$F->start('action=/html-php-page class=formClassName file=true')?>

文本字段

方法名称是你想要的字段类型。textarea、checkbox等。如果值没有空格,则不需要属性字符串中的双引号。如果不需要,则跳过双引号以节省输入。

<?=$F->text('name=name label="Your Name *" style="width:250px" autofocus=autofocus pattern="^^([1-zA-Z0-1@.\s]{1,255})$" ');?>

支持的字段类型:text、password、hidden、submit、reset、image、file、number、email、tel、date、datetime、datetime-local、month、search、time、url、week、color、range、checkbox、radio、select、button。

上面的代码将输出以下HTML

<span id="error-name" class="anchor"></span>
<label for="name_1">Your Name*</label> 
<input type="text" name="name" style="width:250px" autofocus="autofocus" pattern="^^([1-zA-Z0-1@.\s]{1,255})$" id="name_1">

其他示例

<?=$F->email('name=field_name label="The Label" style="width:250px"');?>
<?=$F->textarea('name=field_name label="The Label" style="width:250px"');?>
<?=$F->tel('name=field_name label="The Label" style="width:250px"');?>

复选框

<?=$F->checkbox('name=checkBox label="Checkbox Label" value=Yes')?>

上面的代码将输出以下HTML

<span id="error-checkBox" class="anchor"></span>
<input type="checkbox" name="checkBox" value="Yes" id="checkBox_1"> 
<label for="checkBox_1">Checkbox Label</label> 

选择菜单

<?=$F->select('name=selectMenu label="Select Label" selected=opt2 options="opt1:Option One| opt2:Option Two| opt3:Option Three"')?>

上面的代码将输出以下HTML

<span id="error-selectMenu" class="anchor"></span>
<label for="selectMenu_1">Select Label</label> 
<select name="selectMenu" id="selectMenu_1">
	<option value="opt1">Option One</option>
	<option value="opt2" selected>Option Two</option>
	<option value="opt3">Option Three</option>
</select>

使用数组设置选项。

<? $options = ['Select...'=>'', 'Display Value'=>'value', 'Display Value 2'=>'value2']; ?>
<?=$F->select('name=selectMenu label="Select Label"', $options)?>

自定义错误

使用'error'键设置自定义错误,当表单提交且验证错误显示时显示。

<?=$F->email('name=field_name label="The Label" error="Please enter a valid email address!"');?>

表单验证

validate方法接受等号左边的字段名和等号右边的验证方法。可用的验证方法以类中的validate_开头,因此您可以查找它们以了解它们的作用。clean方法运行几个内容清理函数,以对不符合任何设置模式(如电子邮件或名称等)的数据进行清理。

您可以使用spam方法检查表单是否为垃圾邮件。如果您想使用Akismet,只需传递字段名称给他们的name、email和content。它们需要按此顺序。

如果您想确保表单不包含任何URL,则添加nourls标志,例如:nourls=true。将其设置为true将检查所有字段。如果您只想检查某些字段,则可以这样操作:nourls="field1,field2"。

如果您想检查验证码,请添加captcha标志。使用<captcha()?>>在页面上显示验证码。您需要将form-captcha.php文件移动到公共可访问目录,并将包含路径更改为访问Welder.php文件。

垃圾邮件内容检查

Welder使用几种垃圾邮件检查方法来确定电子邮件消息是否可能是垃圾邮件。使用关键字spamcontent并将其设置为要检查的字段名。例如:spamcontent="subject,message"。

乱码:匹配不是真实单词但只是随机重复按键的文本,如"asdasd"或"qwejjjjjeeee"。

太多辅音:检查消息是否包含连续超过6个辅音的单词。通常表示无效单词和垃圾邮件。

关键字搜索:搜索消息中垃圾邮件常用关键字短语,以向您推销。

$F = new Truecast\Welder; # does not need to be the same instance as the one used to build the form but can be.

if($F->validate('first_name=name email_address=email phone=clean message=required') and $F->spam('akismet="name,email,content" spamcontent="subject,message" nourls="subject,message"')) # valid
{
	$values = $F->get(); # array of values from form cleaned and ready to insert into database or what ever.
	
	# email the form contents to yourself
	$F->emailForm(['to_name'=>'Name', 'to_email'=>'name@gmail.com', 'from_name'=>$values['name'], 'from_email'=>$values['email'], 'subject'=>'Contact from Website', 'type'=>'html'], ['name', 'email', 'phone', 'message']);
	
	# take them to the thanks page
	header("Location: /contact-us/thanks"); exit;
}

获取和设置字段值

如果您想在显示表单但不提交时从数据库记录或其他来源填充表单字段,请使用setFieldValues方法传递字段名到值的键值数组。您可以一次设置多个。

$values = ['field1'=>'hello', 'field2'=>'world'];
$F->setFieldValues($values);

您可以在if($F->validate())方法调用上作为else语句执行此操作,只要确保视图可以访问相同的Welder实例。如果需要,请将$F变量传递到视图中。

if($F->validate()) {
	// form submitted code
} else {
	// form loaded code
	$values = ['field1'=>'hello', 'field2'=>'world'];
	$F->setFieldValues($values);
}

要获取视图中的字段值或所有字段值,请使用

<?=$F->getFieldValues('field1')?>

获取全部(以数组形式)。

<? $array = $F->getFieldValues()?>

配置

关闭CSRF保护

$F = new \Truecast\Welder(['csrf'=>false]);

关闭内联字段错误

通常,每个字段之前都会输出一个span标签,如下所示

<span id="error-first_name" class="anchor"></span>

。如果出于某些原因不想输出此标签,请使用以下代码将其关闭。

$F = new \Truecast\Welder(['hide_field_error_tags'=>true]);

在视图或控制器中使用多个表单

$F = new \Truecast\Welder(['action_field'=>'submit1']);

$F2 = new \Truecast\Welder(['action_field'=>'submit2']);

您需要在控制器实例和视图实例上设置自定义操作字段值,以确保它们匹配。