1. 程式人生 > >Thinkphp5學習(17)輸入和驗證

Thinkphp5學習(17)輸入和驗證

TP5輸入和驗證
1.表單提交
2.表單驗證
3.錯誤提示
4.自定義驗證規則
5.控制器驗證
演示:
建立控制器 建立檢視
建立驗證器

圖1這裡寫圖片描述

圖2
這裡寫圖片描述
form表單提交
Controller
1.自動收集資料input(‘post.’)
2.自動檢測欄位allField(true)
3.自動校驗正確性validate(true),User驗證器配置各個欄位驗證規則

永遠不要相信使用者的資料,所以現在給表單提交沽加資料驗證

建立驗證器

關於生日,
提交時,填寫日期格式:2001-01-01,
入庫時,是,int(10)
顯示時,是,2001-01-01,

model中:

<?php
// application/index/model/User.php

namespace app\index\model;
use think\Model;

class User extends Model
{
    // 定義型別轉換,這樣就不用讀取器,修改器
    // protected $dataFormat = 'Y/m/d';
    protected $type=array(
        'reg_time'=>'timestamp:Y-m-d',
        'nickname'=>'serialize',
        'birthday'
=>'timestamp:Y-m-d' ); // 定義自動完成的屬性 protected $insert = ['status'=>1]; //protected $update = ['status'=>1]; // 還可以結合修改器來指定自動完成 protected function setSexAttr($value,$data){ return $data['head_pic']=='boy.jpg'?1:0; } // 自動完成 insert update auto protected $update
= array( 'sex' =>0 ); public function getRegTimeAttr($value,$data){ return date('Y-m-d',$value).$data['nickname']; } public function setRegTimeAttr($value){ return strtotime($value); } }

validate 中。

<?php
// application/index/validate/User.php

namespace app\index\validate;
use think\Validate;



class User extends Validate
{
    // 驗證規則
    protected $rule = [
        ['nickname','require|min:5','暱稱必須|暱稱不能短於5個字元'],
        ['email','email','郵箱格式錯誤'],
        ['birthday','dateFormat:Y-m-d','生日格式錯誤']
    ];
}
<?php
// application/index/controller/User.php

namespace app\index\controller;
use think\Controller;
use app\index\model\User as mUser;

class User extends Controller
{

    // 建立使用者資料頁面
    public function create(){
        return view();
    }
    // 新增使用者資料
    public function add_0(){
        // 自動收集表單資料 input('post.')
        // 自動排除不相關欄位
        // 自動校驗非法欄位
        // 自動生成insert 語句 執行入庫
        $user =  new mUser;
        if($user->allowField(true)->validate(true)->save(input('post.'))){
            return '使用者['.$user->nickname.':'.$user->id .']新增成功';
        }else{
            return $user->getError();
        }
    }

    // 單獨驗證某欄位
    public function add(){
        $data = input('post.');
        // 驗證birthday 是否是有效的日期
        $check = Validate::is($data['birthday'],'date');
        if(false===$check){
            return 'birthday日期格式非法';
        }
        // 因為Controller名是User,避免重複model取別名為mUser
        $user = new mUser;

        // 資料儲存
        $user->allowField(true)->save($data);
        return '使用者['.$user->nickname.':'.$user->id.']新增成功';

    }
}