cakephp2.doc_062
R e i - D r e a m
for Laravel
TOP > CakePHP2 > Plugin関連(バリデーション)
Guest
login

最終投稿日:2019年11月20日

Plugin関連(バリデーション)
CakePHP2.x
【ビュー側】

<?php echo $this->Form->create("Page",array()); ?>
    ■名前(姓名1カラム)<br />
    <?php echo $this->Form->error("User.name"); ?>
    <?php echo $this->Form->input("User.name",array(
        "type"=>"text","label"=>"","maxlength"=>"20","div"=>false,"error"=>false)); ?>
    <br /><br />
    ■名前(姓名2カラム)<br />
    <?php echo $this->Form->error("User.name1"); ?>
    姓<?php echo $this->Form->input("User.name1",array(
        "type"=>"text","label"=>"","maxlength"=>"20","div"=>false,"error"=>false)); ?>
    名<?php echo $this->Form->input("User.name2",array(
        "type"=>"text","label"=>"","maxlength"=>"20","div"=>false,"error"=>false)); ?>
    <br /><br />
    ■フリガナ(姓名1カラム)<br />
    <?php echo $this->Form->error("User.name_f"); ?>
    <?php echo $this->Form->input("User.name_f",array(
        "type"=>"text","label"=>"","maxlength"=>"20","div"=>false,"error"=>false)); ?>
    <br /><br />
    ■フリガナ(姓名2カラム)<br />
    <?php echo $this->Form->error("User.name3"); ?>
    セイ<?php echo $this->Form->input("User.name3",array(
        "type"=>"text","label"=>"","maxlength"=>"20","div"=>false,"error"=>false)); ?>
    メイ<?php echo $this->Form->input("User.name4",array(
        "type"=>"text","label"=>"","maxlength"=>"20","div"=>false,"error"=>false)); ?>
    <br /><br />
    ■年齢<br />
    <?php echo $this->Form->error("User.age"); ?>
    <?php echo $this->Form->input("User.age",array(
        "type"=>"text","label"=>"","maxlength"=>"2","div"=>false,"error"=>false)); ?>
    <br /><br />
    ■郵便番号(1カラム)<br />
    <?php echo $this->Form->error("User.zip"); ?>
    <?php echo $this->Form->input("User.zip",array(
        "type"=>"text","label"=>"","maxlength"=>"7","div"=>false,"error"=>false)); ?>
    <br /><br />
    ■郵便番号(2カラム)<br />
    <?php echo $this->Form->error("User.zip1"); ?>
    <?php echo $this->Form->input("User.zip1",array(
        "type"=>"text","label"=>"","maxlength"=>"3","div"=>false,"error"=>false)); ?> - 
    <?php echo $this->Form->input("User.zip2",array(
        "type"=>"text","label"=>"","maxlength"=>"4","div"=>false,"error"=>false)); ?>
    <br /><br />
    ■電話番号(1カラム)<br />
    <?php echo $this->Form->error("User.tel"); ?>
    <?php echo $this->Form->input("User.tel",array(
        "type"=>"text","label"=>"","maxlength"=>"11","div"=>false,"error"=>false)); ?>
    <br /><br />
    ■電話番号(3カラム)<br />
    <?php echo $this->Form->error("User.tel1"); ?>
    <?php echo $this->Form->input("User.tel1",array(
        "type"=>"text","label"=>"","maxlength"=>"4","div"=>false,"error"=>false)); ?> - 
    <?php echo $this->Form->input("User.tel2",array(
        "type"=>"text","label"=>"","maxlength"=>"4","div"=>false,"error"=>false)); ?> - 
    <?php echo $this->Form->input("User.tel3",array(
        "type"=>"text","label"=>"","maxlength"=>"4","div"=>false,"error"=>false)); ?>

<?php echo $this->Form->end("確認"); ?>


【カラム命名規則】
        名前(姓名1カラム)        ->  name
        名前(姓名2カラム)        ->  name1,name2
        フリガナ(1カラム)        ->  name_f
        フリガナ(2カラム)        ->  name3,name4
        年齢                      ->  age
        郵便番号(1カラム)        ->  zip
        郵便番号(2カラム)        ->  zip1,zip2
        電話番号(1カラム)        ->  tel
        電話番号(3カラム)        ->  tel1,tel2,tel3


【コントローラ側】

    CakePlugin::load('Hoge');    //プラグインを読み込む
    class PagesController extends AppController {


【モデル側】

<?php
    class User extends AppModel {

        //プラグインを宣言
        var $actsAs = array('Hoge.FormValidation');

        var $validate=array(
            //名前(姓名1カラム)
            "name" => array(
                "check_empty" => array("rule" => array(
                    "check_empty"),"message" => "名前を記入してください"),
                ),

            //名前(姓名2カラム)
            ### 2カラム目の名前は基本は『name2』だが引数に指定すれば変更する事ができます。
            "name1" => array("check_empty_double" => array(
                "rule" => array("check_empty_double","name2"),"message" => 
                "名前を記入してください"),
                ),

            //フリガナ(セイメイ1カラム)
            "name_f" => array("check_kana" => array(
                "rule" => array("check_kana"),"message" => 
                "フリガナを全角カタカナで記入してください"),
                ),

            //フリガナ(セイメイ2カラム)
            ### 2カラム目の名前は基本は『name4』だが引数に指定すれば変更する事ができます。
            "name3" => array("check_kana_double" => array("rule" => array(
                "check_kana_double","name4"),"message" => 
                "フリガナを全角カタカナで記入してください"),
                ),

            //性別
            "sex" => array(
                "check_empty" => array(
                    "rule" => array("check_empty"),"message" => "性別を選択してください"),
                ),
                    
            //年齢
            "age" => array(
                "check_0_9only" => array("rule" => array(
                    "check_0_9only"),"message" => "年齢を記入してください"),
                ),

            //郵便番号(1カラム)
            "zip" => array("check_zip" => array(
                "rule" => array("check_zip"),"message" => "郵便番号を記入してください"),
                ),

            //郵便番号(2カラム)
            ### 2カラム目の名前は基本は『zip2』だが引数に指定すれば変更する事ができます。
            "zip1" => array("check_zip_double" => array("rule" => array(
                "check_zip_double","zip2"),"message" => "郵便番号を記入してください"),
                ),

            //電話番号(1カラム)
            "tel" => array("check_tel" => array(
                "rule" => array("check_tel"),"message" => "電話番号を記入してください"),
                ),

            //電話番号(3カラム)
            ### 2カラム目,3カラム目の名前は基本は『tel2』『tel3』だが
            ### 引数に指定すれば変更する事ができます。
            "tel1" => array("check_tel_triple" => array("rule" => array(
                "check_tel_triple","tel2","tel3"),"message" => "電話番号を記入してください"),
                ),
        );

    }
?>


【プラグイン側】

<?php
//独自のバリデーションメソッドを記述するビヘイビアクラス。
class FormValidationBehavior extends ModelBehavior {

    ### データが空かどうかのチェック
    ### 
    function check_empty(&$model, $data){
    $data = array_shift($data);
    //前後の連続した「 」「 」を削除
    $data = preg_replace('/^[  ]*(.*?)[  ]*$/u', '$1', $data);
        if(empty($data)){return false;}
        
        return true;
    }
    
    ### 2つのカラムをチェック(1つでも空ならfalse)
    ### 2つ目のカラム名は $param に渡す
    ### 
    function check_empty_double(&$model, $data, $param = null){
        $data = array_shift($data);
        if($param == null){$param = "name2";}
        $data1 = $model->data[$model->name][$param];
        
        //前後の連続した「 」「 」を削除
        $data = preg_replace('/^[  ]*(.*?)[  ]*$/u', '$1', $data);
        //前後の連続した「 」「 」を削除
        $data1 = preg_replace('/^[  ]*(.*?)[  ]*$/u', '$1', $data1);
        
        if(empty($data) or empty($data1)){
            return false;
        }
        
        return true;
    }

    ### データがカタカナかチェック
    ### 全角、半角スペースは間にあってもOK
    ###
    function check_kana(&$model, $data){
        $data = array_shift($data);
        //前後の連続した「 」「 」を削除
        $data = preg_replace('/^[  ]*(.*?)[  ]*$/u', '$1', $data);
        if(empty($data)){return false;}
        if(!preg_match("/^[  ァ-ヶー]+$/u", $data)){
            return false;
        }
        
        return true;
    }

    ### 2つのカラムをチェック(1つでも空ならfalse)
    ### 2つ目のカラム名は $param に渡す
    ### カタカナかチェック
    ### 
    function check_kana_double(&$model, $data, $param = null){
        $data = array_shift($data);
        if($param == null){$param = "name4";}
        $data1 = $model->data[$model->name][$param];

        if(empty($data) or empty($data1)){
            return false;
        }
        
        if(!preg_match("/^[ァ-ヶー]+$/u", $data) or !preg_match("/^[ァ-ヶー]+$/u", $data1)){
            return false;
        }
        
        return true;
    }

    ### 0~9のみかチェック
    ### 
    function check_0_9only(&$model, $data){
        $data = array_shift($data);
        if(!preg_match("/^[0-9]+$/u", $data)){
            return false;
        }
        
        return true;
    }

    ### 0~9のみかチェック
    ### 7桁かチェック
    ### 
    function check_zip(&$model, $data){
        $data = array_shift($data);
        if(!preg_match("/^[0-9]{7}$/u", $data)){
            return false;
        }
        
        return true;
    }

    ### 0~9のみかチェック
    ### 最初のカラムが3桁かチェック
    ### 次のカラムが4桁かチェック
    ### 
    function check_zip_double(&$model, $data, $param = null){
        $data = array_shift($data);
        if($param == null){$param = "name4";}
        $data1 = $model->data[$model->name][$param];
        
        if(!preg_match("/^[0-9]{3}$/u", $data)){
            return false;
        }
        if(!preg_match("/^[0-9]{4}$/u", $data1)){
            return false;
        }
        
        return true;
    }

    ### 0~9のみかチェック
    ### 10桁 or 11桁かチェック
    ### 
    function check_tel(&$model, $data){
        $data = array_shift($data);
        if(!preg_match("/^[0-9]{10,11}$/u", $data)){
            return false;
        }
        
        return true;
    }

    ### 0~9のみかチェック
    ### 各カラムの桁数は 2 or 3 or 4
    ### 全てのカラムの合計が10桁 or 11桁かチェック
    ### 
    function check_tel_triple(&$model, $data, $param = null, $param1 = null){
        $data = array_shift($data);
        if($param == null){$param = "tel2";}
        if($param1 == null){$param1 = "tel3";}
        $data1 = $model->data[$model->name][$param];
        $data2 = $model->data[$model->name][$param1];

        if(!preg_match("/^[0-9]{2,4}$/u", $data)){
            return false;
        }
        if(!preg_match("/^[0-9]{2,4}$/u", $data1)){
            return false;
        }
        if(!preg_match("/^[0-9]{2,4}$/u", $data2)){
            return false;
        }
        if(strlen($data.$data1.$data2) <10 or strlen($data.$data1.$data2) > 11){
            return false;
        }
        
        return true;
    }
}
?>
            
レンズモード 【新規購入限定用】
ログインしてコメントを残そう!!


きっぷる