thinkphp学習フォームデータインテリジェント書き込みcreate方法

3120 ワード

データ・オブジェクトcreate()の作成
ThinkPHPは、入庫したデータセットを手動で構築するほか、データオブジェクトを自動的に作成するcreate()メソッドも提供します.create()メソッドは、コミットされたフォームデータを自動的に収集し、手動で介入することなくデータオブジェクトを作成します.これは、フォームデータフィールドが非常に多い場合に便利です.
前述のフォームデータの書き込み例をcreate()で実現します.
public function insert2(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");

    if($Dao->create()){
        $Dao->password = md5($_POST["password"]);
        $Dao->regdate = time();
        if($lastInsId = $Dao->add()){
            echo "     id  :$lastInsId";
        } else {
            echo "      !";
        }
    }else{
        exit($Dao->getError().' [ <a href="javascript:history.back()">   </a> ]');
    }
}

create()データオブジェクトを作成すると、コミットされたフォームデータが自動的に収集されます.フォーム・データは、データ・テーブルに書き込むには、パスワードを暗号化するなど、一定の加工が必要な場合があります.したがって、データ・オブジェクトのメンバー属性値を変更したり、追加したりして削除することができます.
ヒント:create()で作成したデータオブジェクトはメモリに格納され、入庫動作(add()またはsave()を実行する前に変更できます.
上記の例ではcreate()メソッドの動作はdate()メソッドと一致する.ただし、date()メソッドは単純なデータオブジェクトの作成にすぎませんが、create()メソッドには次のものがあります.
トークン検証データ自動検証フィールドマッピングはをサポートする
フィールドタイプチェックデータ自動完了これらの高度なデータモデル機能を達成するには、Dメソッドを使用してデータモデルをインスタンス化する必要があります.ThinkPHPは、「ThinkPHP自動検証」と「ThinkPHP自動充填」を参照して呼び出すための様々な検証および充填規則を提供します.
自動検証と自動入力
フォームをデータ・テーブルに書き込む前に、例のパスワードの暗号化や現在のタイムスタンプの取得など、データの検出(コミットされたユーザー名が要求に合っているかどうか)や処理が行われることがよくあります.create()メソッドは、データの自動検証と自動完了をサポートします.
LibModelディレクトリの下にUserModelを作成します.class.phpファイル(Userは作成したモデルオブジェクトであり、接頭辞_userテーブルにも対応する)には、自動検証と自動入力ルールが追加されます.
class UserModel extends Model{
    //       
    protected $_validate = array(
        array('username','require','       !',1),
        array('email','email','      !',2),
        array('username','','       !',0,'unique',1),
    );
    //      
    protected $_auto = array(
        array('regdate','time',self::MODEL_INSERT,'function'),
        array('password','md5',self::MODEL_INSERT,'function'),
    );
}

Insert 2操作を次のように変更します.
public function insert2(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = D("User");

    if($Dao->create()){
        if($lastInsId = $Dao->add()){
            echo "     id  :$lastInsId";
        } else {
            echo "      !";
        }
    }else{
        exit($Dao->getError().' [ <a href="javascript:history.back()">   </a> ]');
    }
}

コミットされたデータが認証要件(ユーザー名が存在する場合)に合致しない場合、create()はデータオブジェクトの作成に失敗し(FALSEに戻る)、$Dao->getError()は自動認証設定ルールに設定されているプロンプト情報を印刷します:ユーザー名はすでに存在します!
検証ルールが通過すると、自動入力設定が行われ、フォームパスワードがMD 5暗号化され、現在のタイムスタンプがcreate()のデータオブジェクトに埋め込まれます.
だからD方法はcreate()に協力するのはとても知能的で強大で、適切に運用して事半功倍の迅速な開発の目的を達成することができます.
ヒント
Dメソッド配合create()は、その機能が強いため、一定の効率を損なうため、ビジネスロジックが複雑でない場合にMメソッド+data()モードを推奨する.
create()はデフォルトでPOSTデータを受け入れるが、他のタイプのデータを受け入れるには、GETデータ:create($_GET)を受け入れるようにパラメータ内で指定するだけでよい.