在 WordPress 中使用 Nette-Form 表单类创建表单并提交到后台

在 WordPress 中使用 Nette-Form 表单类创建表单并提交到后台

在 WordPress 中使用 Nette-Form 表单类创建表单并提交到后台

在使用 WordPress 模板创建自定义表单,让用户从前段页面输入数据过程是很麻烦的,主要麻烦的地方在于创建 HTML 表单并验证用户提交的数据,这一个过程需要写很多代码,一不小心,很容易会出错,导致表单提交不了,或出现一些安全性问题。

Nette-From 类库住 PHP Nette 框架中的表单处理类,我们可以把这个类拿出来单独使用,使用方法也非常简单,我们来看一下,下面的代码都是写在一个 WordPress 标准的页面模板中的。

第一步,安装并引入Nette-From类库

通过 Composer安装Nette-From类库

composer require nette/forms

如果不知道怎么使用 Composer,请参考本站之前的文章在WordPress主题或插件中使用php Composer

引入 From 类

这一步很简单,通过 Composer 安装完成之后,直接在页面模板中引入Composer 生成的 autoload.php 文件即可。

require_once( dirname( __FILE__ ) . '/vendor/autoload.php' );

use Nette\Forms\Form;

创建表单并显示

最重要的一步就是创建表单了,这也是和直接使用 HTML 创建表单不同的地方,在这里,创建表单的代码完全写在 PHP 中,不用再去写乱七八糟的 HTML 代码了,代码量减少了不少,出错的机会自然也少了。

// 获取用户数据,在为表单设置默认数据时使用
$uid = wp_get_current_user()->ID;
$nickname = get_user_meta($uid, 'nickname' ,true);
$card = get_user_meta($uid, 'card' ,true);

//创建表单
$form = new Form;
$form->setMethod( 'POST' );

$form->addText( 'nickname', '昵称:' )
     ->setRequired( '请输入昵称' ) // 这里设置了验证此项为必填项
     ->setDefaultValue($nickname);

$form->addText( 'card', ' 会员卡号:' )
     ->setDefaultValue($card);

$form->addSubmit( 'send', '修改资料' );

//显示表单
echo $forms;

提交到后台

最后一步就是把提交过来的数据提交到后台了,提交之前,我们可以先验证一下表单的数据是否符合我们设置的条件,验证过程Nette-From帮我们处理了,我们只需要简单的判断一下是否验证成功就可以了,如果验证成功,就把数据保存到后台,这里直接使用 update_user_meta 把数据保存到了用户自定义字段。如果验证失败,就显示错误提示信息。

// 验证表单
if ( $form->isSuccess() ) {
    // 获取表单的值,有了这个,就不用通过丑陋的$POST[*]来获取表单提交的值了。
    $values = $form->getValues();
    // 保存自定义字段,有了这个操作,才能保存数据到数据库中
    update_user_meta( $uid, 'nickname', $values->nickname);
    update_user_meta( $uid, 'card', $values->card);

    // 显示成功提醒
    echo '<div class="ui-alert ui-alert-success">用户资料修改成功</div>';
}

// 如果表单有错误,显示错误信息
$form->render( 'errors' );

到这里,一个功能完整的表单就处理好了,当然,演示代码中需要处理的数据比较少,看起来可能没什么必要,试想一下,如果表单项非常多的情况下,直接使用 HTML 创建表单,还是使用本文介绍的方法比较方便,相信结果是一目了然的。

本站提供 WordPress 主题定制开发服务

本站长期承接 WordPress 主题、插件、基于 WooCommerce 的商店商城开发业务。 我们有 8 年 WordPress 开发经验,如果你想 用 WordPress 开发网站, 请联系 QQ: 470266798,或邮箱: 4626395@gmail.com 咨询。

2 thoughts on “在 WordPress 中使用 Nette-Form 表单类创建表单并提交到后台

    1. 是的,之前推荐过,解决问题的方法不止一个,这个方法相当于 Piklist,更灵活。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*