BFWSOA框架表单验证与提交

在项目中,我们用到最多的就是表单提交,刚学编程的人可能只知道用js验证一下就ok了,但是这是不安全的,因为所有的客户端都是不可信任的,客户端验证可以没有,但是服务端验证必须要有,今天我给大家演示一下如何用BFW进行表单验证与提交

首先在控制器文件夹(App\Cms\Controler)新建一个控制器文件Controler_Article.php,代码如下:

namespace App\Cms\Controler;

use Lib\Bfw;
use Lib\BoControler;
use App\Cms\Client\Client_Article;

class Controler_Article extends BoControler
{


    /**
     * 文章添加
     */
    function AddData()
    {
        $this->OutCharset("utf-8");
        if ($this->IsPost()) {
            $_formdata = $this->FormArray(array(
                "title",
                "classname",
                "content"
            ), false, "Article");
            if ($_formdata['err']) {
                return $this->Error($_formdata['data']);
            }
            /*添加进数据库操作
            code
            */
             return $this->Alert("添加成功", array(
                array(
                    "返回",
                    Bfw::ACLINK("Article", "ListData"),
                    ""
                )
            ));
        }
    
        $this->Display();
    }
}
我们来分析一下这段代码,首页我们用$this->OutCharset("utf-8")将输出编码设置为utf-8,注意,如果您的view文件是utf-8,这个设置可以省略,如果不是,就必须要设置,否则就会产生乱码;然后我们用$this->IsPost()来检测是否是表单提交行为,如果没有提交,我们就执行$this->Display()将视图文件渲染出来,我们在App\View\Cms\Article目录下新建一个文件AddData.php,内容如下:

<html>
<head>
<title>BFW Tutorial</title>
</head>
<body>
    <form action="" method="post">
           <label>标题</label><input name="title" type="text"  />
           <label>类别</label><input name="classname" type="text" />
           <label>内容</label><textarea name="content" rows="12" cols="10" ></textarea>
           <input type="submit"  value="确认保存"/>
    </form>
</body>
</html>
好了,form表单中有三个字段,title、classname、content,这三个字段是我们需要取值的,所以在我们使用了$this->FormArray(array( "title", "classname","content" ), false, "Article")进行表单值验证,第一个参数是告诉验证程序我需要取哪些字段交给他去验证,第二个参数表示是否将字段的值进行html过滤,第三个参数指定验证者(VALIDATE),这个验证者就在App\Cms\Validate\下,下面我们在App\Cms\Validate\新建一个验证者Validate_Article.php,文件内容如下:

namespace App\Cms\Validate;
use Lib\Bfw;
use Lib\BoValidate;
/**
 * @author Herry
 * 文章验证
 */
class Validate_Article extends BoValidate
{

    public $_validate_array = array(
        array(
            "classname",
            "require",
            "类别必填"
        ),
        array(
            "title",
            "require",
            "标题必填"
        ),
        array(
            "content",
            "require",
            "内容必填"
        )
    );
}

这是一个验证类,里面有一个验证数组,数组第一个表示验证的字段,第二个表示验证的类型,第三个表示验证不通过的提示信息,验证类型有chinese(中文)、money(金钱)、identity(身份证)、url(http地址)、username(用户名)、len(长度)、phone(电话)、in(内含)、require(必填)、qq(QQ号)、email(邮箱)、number(整型数字)、regex(正则)、自定义函数等;验证通过后将返回一个数组,如果数组中err为真,表示出错,提出信息为data,如果没有出错就可以将formdata进行插入操作了,操作成功后给浏览器一个提示,并增加返回按钮,$this->Alert中第一个参数为提示信息,第二个参数为按钮列表数组,列表数组中第一个为按钮名称,第二个位按钮链接,第三个为打开方式,有(self,_blank),最后介绍一下我们的控制器跳转链接生成函数Bfw::ACLINK,第一个参数为控制器名称,第二个位动作器名称,第三个为其他参数,第四个为域的名称。默认第三个第四个可以省略。

除了上面的验证方式外,bfw还提供自定义函数验证,在Validate_Artcile.php中加入自定义函数

namespace App\Cms\Validate;

use Lib\Bfw;
use Lib\BoValidate;

/**
 *
 * @author Herry
 *         文章验证
 */
class Validate_Article extends BoValidate
{

    public $_validate_array = array(
        array(
            "classname",
            "checkClassName"
        ),
        array(
            "title",
            "require",
            "标题必填"
        ),
        array(
            "content",
            "require",
            "内容必填"
        )
    );

    function checkClassName(&$a)
    {
        if ($a != 1) {
            return Bfw::RetMsg(true, "类别不能为1");
        }
    }
}
然后将验证数组中的对classname的验证改为自定义函数checkClassName,Ok,这样就完成了自定义验证了

{{collectdata}}

网友评论0