人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

cakephp1.2のバリデーションについて質問です。

フォームから入力された値に対して、空白チェックしたいと思います。
この項目はDB登録・更新しないので、テーブル定義されていません。
※ある値を計算するために必要な項目(数字)となります。

どのようにバリデーションすれば良いのでしょうか?
(サーバ側の話です。)

私の認識ですと、テーブル定義されていないので、modelのvalidatesは使えないと思っています。

何か良い方法をアドバイスしてください!
また、そういうことが書かれているURLがあれば教えてください。
よろしくお願いします。

●質問者: jojo_oraora
●カテゴリ:ウェブ制作
✍キーワード:dB Model URL アドバイス サーバ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● zero-uhura
●35ポイント

1.1系での話しで恐縮です(ポイントは結構です)、参考になればと思います。

モデルで設定することも可能です、こうすると他のテーブル定義ありと同じフローでプログラミングできます。

モデル

<?php
class Inquiry extends AppModel {

var $name = 'Inquiry';
var $validate = array(
'email' => VALID_NOT_EMPTY,
'body' => VALID_NOT_EMPTY,
);
var $useTable = false; // テーブル定義なし
}
?>

コントローラ

<?php
class InquiryController extends AppController {

var $name = 'Inquiry';
var $helpers = array('Html', 'Form',);
var $uses = array ('Inquiry',);

function inquiry () {
if (!empty($this->data)) {
if($this->Inquiry->validates($this->data)){
// 保存に変わる何らかの処理(メール送信とか)
} else {
$this->Session->setFlash('登録内容に誤りがあります。');
}
}
}

}
?>

http://q.hatena.ne.jp/ (URLはダミーです。)

◎質問者からの返答

これではできないと思います。

modelに書いてある「email」「body」は、どこで定義されているものでしょうか?

通常、テーブル定義の部分ですよね。

また、コントローラでemptyを使っているところも、少し違うような気がします。

それでは、フレームワークの良さも半減なような。


2 ● zero-uhura
●35ポイント ベストアンサー

modelに書いてある「email」「body」は、どこで定義されているものでしょうか?

DB登録しないので、モデルで定義を行えば十分かと思います(あなたが思う定義を行えばよいです、名前とかバリデーションとか)。


また、コントローラでemptyを使っているところも、少し違うような気がします。

それでは、フレームワークの良さも半減なような。

これは、バリデーションを行っているのではなく、フォームの初期状態を表示するか、送信データで処理を行うかの判断を行っています(送信データがあれば処理を行い、なければフォームの初期状態を表示)。

なお、このロジックは「./cake/console/cake bake」での生成コードでも利用されています。



1.2系で試してみました、足し算するだけの見本

下記のMVCを用意して以下のURLにアクセスしてみてください。

http://あなたの用意したドメイン[/サブディレクトリがあればそのディレクトリ]/calcs/sum

モデル (.../app/models/calc.php)
<?php
class Calc extends AppModel {

var $name = 'Calc';
var $validate = array(
'num_a' => array(
'rule' => 'numeric',
'message' => '数値をいれてね',
),
'num_b' => array(
'rule' => 'numeric',
'message' => '数値をいれてね',
),
);
var $useTable = false; // テーブル定義なし

var $ans; // 計算結果

function sum ($data = null) {
// バリデーション
if(!$this->validates()) return false;

$this->ans = $data['Calc']['num_a'] + $data['Calc']['num_b'];
return true;
}

}
?>

コントローラ (.../app/controllers/calcs_controller.php)
<?php
class CalcsController extends AppController {

var $name = 'Calcs';
var $helpers = array('Html', 'Form');

function sum() {
if (!empty($this->data)) {
$this->Calc->set( $this->data );
if ($this->Calc->sum($this->data)) {
$this->Session->setFlash('計算しますた、回答は「' . $this->Calc->ans . '');
$this->redirect(array('action'=>'sum'));
} else {
$this->Session->setFlash('入力に誤りがあります');
}
}
}

function index() {
echo 'test';
exit;
}

}
?>

ビュー (/app/views/calcs/sum.ctp)
<?php echo $form->create('Calc', array('action' => 'sum'));?>
<fieldset>
 <legend><?php __('Calc');?></legend>
<?php
echo $form->input('num_a');
echo $form->input('num_b');
?>
</fieldset>
<?php echo $form->end('Submit');?>

http://q.hatena.ne.jp/ (またまた、URLはダミーです。)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ