cakephp2.doc_062
最終投稿日:2019年11月20日
【ビュー側】
<?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;
}
}
?>