人気ブログランキング |
(cakePHP)コントローラからモデルにアクセス
久しぶりにcakePHPに開発に復帰しましたが、2週間ほど離れただけで早くもいろいろ忘れています。

今回バリデートの機能の豊富さを見越してcakePHPを1.2にバージョンアップさせました。
その時のメモはまた後日公開します。

ところでcakePHP1.2ではビューの入力に使ってたHtmlヘルパーの大半がFormヘルパーに移行されてます。
よく使うのは $form->input でしょう。これも大幅機能強化されたみたいで、日付の入力のセレクトボックスとかも1.1時代より簡単に使えるようになった気がします。(これについても後日)

で、日付入力セレクトボックス作ったのですが、この値は指定したモデルに下記のような配列で格納されてました。

Array
(
[year] => 1966
[month] => 11
[day] => 07
)


今、入力後に確認画面に飛ぶようなつくりにしているのですが、確認ビュー側で下記のようにしてやってもArrayと表示されるだけで値が取れません。

$form->value('Member.mem_birthday.year')


DBに保存するときもyyyyMMddという文字列で保存したいということでコントローラ側でデータを加工してから(単一の文字列にしてから)DBに渡すことにしました。

で、いきなりつまずいたのが、コントローラからモデルの中身にどやったらアクセスできるの? ということです。

cakePHPには debug() 関数たるものがあって、これで簡単に変数がのぞけます。
これを駆使した結果下記のようにしてコントローラからモデル(日付セレクトボックスの値)にアクセスできることが判明しました。


//ビューから送られてきた日付セレクトボックス( $form->input の "type" => "date" )でできたモデルに格納された値を取得。
debug( $this->data['Member']['mem_birthday']['year']);
debug( $this->data['Member']['mem_birthday']['month']);
debug( $this->data['Member']['mem_birthday']['day']);
 
//DBから拾ってきたモデル本体の値をとるには
debug( $this->Member->data['Member']['mem_birthday']['year'] );
debug( $this->Member->data['Member']['mem_birthday']['month'] );
debug( $this->Member->data['Member']['mem_birthday']['day'] );

上と下では意味が違うみたいなので注意。
上のほうはビューから送られてきたデータです。
下は本当のモデルです。
しかし、本当にこの方法でいいのかは不明です。

では確認画面として使ってるビューのほうでどうやれば取り出せるのか試してみました。
どうやら下記のようにするとうまくいくようです。
$form->value('Member.mem_birthday.year')

ドットで区切れば配列であっても見えるということですね。

これで確認画面から送られてきたモデルを加工し、配列から文字列に直してDBにセットすればOKというわけです。
by jehoshaphat | 2008-11-07 19:48 | PHP開発


<< phpMyAdminを使いMy... (PHP)PHPでファイルをダ... >>