ホーム » ブログ » 2007年06月 » CakePHPでDBに関連しないパラメータはヘルパーで書くべきか? (Re:CakePHP修行! | idea*idea)

CakePHPでDBに関連しないパラメータはヘルパーで書くべきか? (Re:CakePHP修行! | idea*idea)

2007-06-28 written by akiyan | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

CakePHP修行! | i d e a * i d e aが更新されました。少々長くなるので2回に分けます。

まずはURIについて。

初期状態のURIの規則は /コントローラー名/アクション名/パラメータ1/パラメータ2...

モックアップ画面をいろいろ作る(CakePHP修行 #010)より。

URL的には http://www.codexcode.com/users/25 とかかな。

単なる書き間違いのような気もしますが、空気を読まずにつっこんでいきます。

Cake(けーく)の初期状態でのURIの規則は /コントローラー名/アクション名/パラメータ1/パラメータ2... なので、このURIは使えません。RewriteRuleや app/config/routes.php の設定次第では可能ですが、最初は初期状態で通るURIを使っておきましょう。

この場合は /users/summary/25 などですね。(アクション名にもっと適している単語があればそれで)

さて、今回の本題。

DBに関連しないパラメータはヘルパーで書いてもいいし書かなくてもいい

ログイン画面を作っていくぞ、と(CakePHP修行 #011)より、ログイン画面のテンプレートがあがってきました。(テーブルレイアウトかよとか言わない)

<form action="<?php echo $html->url('/users/login'); ?>" method="post">
<?if ($error): ?>
<div id="sys_msg">email and password do not match!</div>
<? endif; ?>
<table border="0" cellspacing="2" cellpadding="2">
<tr><td width="40%" align="right">email</td><td><?php echo $html->input('User/email', array('size' => 30)); ?></td></tr>
<tr><td width="40%" align="right">password</td><td><?php echo $html->input('User/pwd', array('size' => 20)); ?></td></tr>
<tr><td width="40%">&nbsp;</td><td><input type="checkbox" name="save" value="" /> save my info?</td></tr>
<tr><td width="40%">&nbsp;</td><td><?php echo $html->submit('Let me in!'); ?></td></tr>
<tr><td width="40%">&nbsp;</td><td><a href="">forgot your password?</a></td></tr>
</table>
</form>

おおむね問題無さそうです。しかし中の人は納得が行かない様子です。

「save my info?」のところをどう処理したらいいかわかりません。checkboxの表現もわからなければ、データとしてどう持つべきかもよくわかりません。そういうときは「ザ・後回し!」。

checkboxの値がモデルと関連せず、checkboxがhtmlヘルパーを使わずに書かれていること言っているのだと思いますが、実はこれでもよかったりします

まず、この書き方のときのcheckboxの値は $this->params['form']['save'] で参照できます。

次にcheckbox用のヘルパーとして$html->checkbox()がありますが、Cakeのフォーム用のヘルパーに渡せるキー名は「モデル名/フィールド名(例:$html->checbox('Example/example', null, array('checked' => $example_checked);)」に限られています。モデル名もフィールド名も必須です。

むりやり $html->checkbox('save', null, array('checked' => false)); と書いた場合、ヘルパーの中でNoticeエラーが発生してしまいます。ただ、一応inputタグは出力されるので、app/config/core.php のDEBUG値を0にしているとエラーが出ず正常に動作しているように見えてしまいます。異常に気付くためにDEBUG値は開発中は2にしておくことをおすすめします。

まとめ

というわけで、DBに関連しないようなパラメータをヘルパーで扱うときは存在しないモデル名を指定して書くことになります。例えば $html->checkbox('Param/save'...といった感じで書けば、$this->data['Param']['save'] で参照できます。存在しないモデル名を書くことが何となく気持ち悪ければヘルパーを使わずに書いてもよいです。このあたりはTPOと好みで判断してください。

ちなみに僕はDBに関連しないときはヘルパーを使わずに書く派です :)

2007-06-28 written by akiyan | 記事 | このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク

コメント

shin1x1 - 2007-06-29 07:07:35

ヘルパ使わない派にもう一票 ノ
Cakeのヘルパはちょっとクセがあるので適材適所で。

投稿



本文と関連性の無いコメントは削除することがあります。予めご了承ください。

トラックバック

このエントリへのトラックバックURLは
http://www.akiyan.com/cgi/mt/mt-tb.cgi/1408
です。トラックバック元のエントリに当サイトへのリンクが無い場合はトラックバックを削除することがあります。