読者です 読者をやめる 読者になる 読者になる

Motomichi Works Blog

その日学習したことについて書いている日記です。誰かの役に立ったらそれはそれで嬉しいです。

vagrantその19-39 cakephp入門をやってみる(バリデーション 簡易設定)

制作 vagrant cakephp

参考にさせて頂いたページ

バリデーションを使おう!(2/5):初心者のためのCakePHP2.0 プログラミング入門

データバリデーション — CakePHP Cookbook 2.x ドキュメント

ホストマシン環境

ゲストマシン環境

今回使用するファイル

過去にvagrantその19-28 cakephp入門をやってみる(データを追加する)INSERT - MOTOMICHI WORKS BLOGで作成したフォームにバリデーション機能を追加するので、以下の2ファイルを編集する。

  • app/Model/MySampleData.php
  • app/View/MySampleDatas/add.ctp

今回編集はしないけど、以下のファイルも関連

  • app/Controller/MySampleDatasController.php

http://192.168.33.10/cakephp/my_sample_datas/addで動作確認をする。

app/Model/MySampleData.phpの記述内容

参考ページにならって以下の通り

<?php
App::uses('AppModel', 'Model');

class MySampleData extends AppModel {
  public $validate = array(
    'name'=>'notEmpty',
    'mail'=>'email',
    'tel'=>'alphaNumeric'
  );
}

app/View/MySampleDatas/add.ctpの記述内容

<h1>Add Page</h1>
<p>MySampleData Add Form.</p>
<?php
  echo $this->Form->create('MySampleData');
?>
name:
<?php
  echo $this->Form->text('name');
  echo $this->Form->error('name');
?>
mail:
<?php
  echo $this->Form->text('mail');
  echo $this->Form->error('mail');
?>
tel:
<?php
  echo $this->Form->text('tel');
  echo $this->Form->error('tel');
  echo $this->Form->submit("送信");
  echo $this->Form->end();
?>

<table>
<?php foreach ($datas as $data): ?>
  <tr>
    <td><?php echo $data['MySampleData']['id']; ?></td>
    <td><?php echo $data['MySampleData']['name']; ?></td>
    <td><?php echo $data['MySampleData']['mail']; ?></td>
    <td><?php echo $data['MySampleData']['tel']; ?></td>
  </tr>
<?php endforeach; ?>
</table>

このソースについて

Modelファイルのclassの中で、以下のように配列$varidationを設定する。

$validate = array(
    name属性 => バリデーションの名前 , 
    name属性 => バリデーションの名前 , 
    ……必要なだけ続く……
}

Viewファイルの中には以下のように記述する。

echo $this->Form->error('name属性');

バリデーションを設定した要素には、デフォルトではrequired属性が付与されるので、submitしたときにブラウザに実装されたツールチップが出たりする。

バリデーションの詳細設定について

データバリデーション — CakePHP Cookbook 2.x ドキュメント

を参考に少し調べてみた。

以下のように、さらに連想配列でrule,required,messageなど他にも指定したり組み合わせたりできる様子であり、郵便番号や電話番号は国に合わせたローカライズもできるらしい。

class User extends AppModel {
    public $validate = array(
        'login' => array(
            'alphaNumeric' => array(
                'rule'     => 'alphaNumeric',
                'required' => true,
                'message'  => 'Letters and numbers only'
            ),
            'between' => array(
                'rule'    => array('between', 5, 15),
                'message' => 'Between 5 to 15 characters'
            )
        ),
        'password' => array(
            'rule'    => array('minLength', '8'),
            'message' => 'Minimum 8 characters long'
        ),
        'email' => 'email',
        'born' => array(
            'rule'       => 'date',
            'message'    => 'Enter a valid date',
            'allowEmpty' => true
        )
    );
}

今回はここまで。