お客さんの要望で複数行のリストを直接リストの画面で編集したいと
言われて作った時に困った入力チェックの方法を覚書しておきます。
シチュエーションは注文カートに注文情報を入れてるリストで
数量を一気に変えたいというものでした。
まずビューで登録されている注文の商品と個数を一覧に出します。
<table>
<tr>
<th>商品名</th>
<th>値段</th>
<th>数量</th>
</tr>
<?php foreach($lists as $key=>$val) { ?>
<tr>
<td><?= es($val['Order']['name']) ?></td>
<td><?= es($val['Order']['price']) ?></td>
<td><?php echo $form->input("Order.{$key}.num", array('type' => 'text')); ?></td>
</tr>
<?php } ?>
</table>
<input type="submit" name="recalc" value="再計算" >
ここで数量のところをテキスト入力にしておいて再計算ボタンを押して$this[‘Order’][キーの番号][‘num’]
という風にコントローラに持ってきます。
これをモデルに渡して数量の入力チェックをかけます。
//注文リストの変更の際の入力チェック
function orderValidates($data) {
$chk =& Validation::getInstance();
//注文リストに入れる際に入力チェックをする
foreach($data['Order'] as $key=>$val) {
if (empty($val['num']) || !$chk->numeric($val['num'])) {
$this->validationErrors[$key]['num'] = '数量が不正です';
}
}
//結果の返却
if (count($this->validationErrors) > 0) {
return false;
}
return true;
}
これで数量の入力チェックでエラーが出た時にエラーの行の数量のテキストエリアの
隣に「数量が不正です」とメッセージをcakeが自動で出してくれました。