【保存版】2013年度発売全パチスロアプリ一覧(iPhone,iPad)

【CakePHP】あら簡単!CakePHP2でテーブル未使用モデルのバリデーションチェック。

ユーザーからの入力値を、DBテーブルへの保存はせずに
チェックのみ行いたい場合があるかと思います。
例えば、簡易的にメール送信する場合、
入力されたメールアドレスのチェックを行うだけで
特に入力値のDBテーブルへの保存は不要といったケースです。

CakePHPでは、このようなDB保存が伴わない場合でも、
モデルのバリデーションチェック機能を利用することは可能です。

以下、CakePHP2.xでテーブルなしモデルのバリデーションチェック
の実装方法を説明します。(2.2.5で確認)
サンプルとして、以下のような入力用テキストボックス一つと
送信ボタンのあるフォームを使います。

テーブルなしモデルバリデーションチェック1

1 コントローラ


コントローラーで、POSTされたデータのバリデーションチェックを
行います。

コントローラー(Controller/ValidateTestsController.php)
<?php
App::uses('AppController', 'Controller');
class ValidateTestsController extends AppController {
 public function index() {
  if ($this->request->is('post')) {
   $this->ValidateTest->set($this->request->data);
   if ($this->ValidateTest->validates()){
    echo 'バリデーションOK';
   } else {
    echo 'バリデーションNG';
   }
  }
 }
}

2 モデル


モデルでは、テーブル未使用及び、
バリデーション用スキーマ定義を設定します。
バリデーション内容には、notEmpty(入力値空チェック)を設定。

モデル(Model/ValidateTest.php)
<?php
class ValidateTest extends AppModel {
 public $useTable = false;

 public $_schema = array(
  'input_text' => array(
   'type' => 'string',
   'length' => 10
  )
 );

 public $validate = array(
  'input_text' => array(
   'rule' => 'notEmpty'
  )
 );
}

3 ビュー


ビューでは、上記で作成したテーブルなしモデル(ValidateTest)を
フォームに指定します。

ビュー(View/ValidateTests/index.php)
<?php
 echo $this->Form->create('ValidateTest');
 echo $this->Form->input('input_text');
 echo $this->Form->end(__('Submit'));
?>

以上の3ファイルを配置完了後、コントローラのURLへアクセスします。
表示されたページから、
入力値ブランクの状態でフォームを送信すると、
以下のようにバリデーションチェックが実行されます。

テーブルなしモデルバリデーションチェック2

ポイントは、「モデル上でスキーマ定義しておく」ことです。
これにより、フォームヘルパーを使って簡単にバリデーションチェックが
できるようになります。

ちなみに、項目名に「id」を使用すると、
モデルでテーブルを使用しない設定をしているにもかかわらず、
(public $useTable = false;)
バリデーションOK時にかぎり、
なぜかDBへの問い合わせ(存在チェック?)が実行されて
エラーとなります。
(エラーメッセージ)
SELECT COUNT(*) AS `count` FROM `データベース名`.`validate_tests` AS `ValidateTest` WHERE `ValidateTest`.`id` = '1'

結果としてテーブルなしモデルのバリデーション
チェックにおいては、
モデルのスキーマ定義に項目名「id」は使えません。
こういったケースはあまりないかもしれませんが、ご注意を。


【ありそうでなかった、利用規約の解説本がでました!】
>>良いウェブサービスを支える「利用規約」の作り方



【CakePHP2.x系書籍】
(初級者〜中級者)
>>CakePHP2 実践入門 (WEB+DB PRESS plus) New!
>>詳解CakePHP辞典―2.0/2.1/2.2/2.3対応

(初級者)
>>WebデザイナーのためのCakePHPビューコーディング入門
[Google PR]

Twitterはじめました。プラプラ | Twitter

<< 【CakePHP本】プチレビュー追記あり。CakePHP2系リファレンス「詳解CakePHP辞典 2.0/2.1/2.2/2.3対応」が予約開始。
【e-mobile】(2013年3月12日)GL02P用の新ファーム(V3)がリリースされました。 >>

[関連エントリ 最新5]

[Google PR]


[最新エントリ 5]

>>トップページ
人気カテゴリ:AccessTips SQLServer CakePHP iPad
過去ログ(全記事一覧)

コメント
コメントする(お気軽にどうぞ)









この記事のトラックバックURL
トラックバック
カテゴリー
プロフィール
お問い合わせ
Powered by NINJA TOOLS
links
recent comment
  • 【Access】vbaでhmacが正しく計算できた!!
    まさ (06/01)
  • 【Access】AccessReportMailメール送信時のポートを25から587へ
    わら (05/31)
  • 【SQLServer】超シンプル!再帰CTE(共通テーブル式)で連続データを作成する。
    sazi (09/08)
  • 【あまっちゃお】Amazon商品検索「あまっちゃお」プロジェクト始動。Ver00-06-00 β
    カメちゃん (07/31)
  • 【Access】あれ?DoCmd.RunCommand acCmdSaveRecordの内部仕様が変わった?
    花姉 (03/17)
  • 【Access】実行中のmdb(自分自身)をバックアップコピーする方法。
    亀 (02/06)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    管理人 (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    あ (01/31)
  • 【雑記】Amazonでの注文時、TMGさん発送にご注意を。納期を守れない可能性あり!
    K (11/13)
  • 【VAIOP】VaioXと両持ちできるものすっっごくマニアックなケース。当たり前ですが在庫限り。(笑)
    管理人 (08/04)
recent trackback
  • 【Access】2003安全でない式がブロックされていませんとセキュリティーレベル。
    awgs Foundry (10/29)
  • 【VAIOtypeP】液晶保護シートは、新車のカバーではない。レイアウト社液晶/天板保護フィルムセットRT-VP1FS1
    XMLがキライ。 (04/09)
  • Vistaから、LinkStation(NAS)にアクセスできません。
    そのほかいろいろ (09/06)