先日公開してみた「気になるATND検索」ですが、解決した点とか反省点があります。
・・・ほんと恥ずかしい点もあってアレなんですが(汗
ウェブアプリ作ってみると本当に勉強になります。
それもローカルだけで動かすのではなくて、公開までやってみるとより一層。
先ずは、落ち着いて書いたものを見直しましょう。。。という点。
デバッグレベルを「0」にすると動作が変わる
CakePHPでは、公開する時に基本的にデバッグレベルの設定値を「0」にするのですが、いざファイルを上げてCakeを置いているトップにアクセスすると、404エラーが発生してました。
う~んう~んナゼに!?とひどく頭を悩ませてました。。。
トップの表示を変更するために、
/cake/libs/view/pages/home.ctp をコピーして /app/views/pages/home.ctp に置いて利用します。
この際に見逃していたコードがありました。
if (Configure::read() == 0):
$this->cakeError('error404');
endif;
コードの存在そのものもなのですが、このreadメソッド、引数がないと「デバッグレベル」の値を読み込んでくれます。
そりゃ404帰って来ますね。。。リアルに(゜ロ゜)ギョエエェってなりました。
今回はこのコード+ビュー側に動作コードがないハズ、という思い込み。
思い込みキケン!だめぜったい!
ちなみに引数はwrite()で書き込んだ設定値を取って来てくれます。
■Configurationクラス :: 環境設定 :: CakePHPによる開発 :: マニュアル :: 1.3コレクション
これを利用してゴニョゴニョする方法もあるのですが、それはまたいずれ。
▼教訓:ファイルをコピーして利用する時は、必ず詳細に確認しましょう!・・・orz
シリアライズかけて利用
クッキーの配列利用が出来なかったのはこれでした。
// 2次元等の配列はシリアライズして書き込む
$arrayCookies = serialize($arrayCookies);
// クッキーに保存されている配列
$arrayCookies = $this->Cookie->read('hogeCookies');
// アンシリアライズして利用する
$arrayCookies = unserialize($arrayCookies);
暗号化さえすればそのまま行けるだろうって思ってたんですけど、犯人はここでした。
■多次元配列のクッキー作る -> シリアライズ -> 書込
■クッキー読込 -> アンシリアライズ ->使う
この流れをきちんと留めておこうと思います。
▼教訓:配列やオブジェクトは(アン)シリアライズかけて利用しましょう!・・・orz
公開状態にしてからのテスト
今回、作成したあとに即公開して後悔しちゃいました。
もっと公開スペースで動作確認してから、それから開示ですね。
いざアップして、一見したくらいでは気付かなかった点や、ローカルでは動くのにアップするとダメになる点、というのがありました。
なので、せっかく作ったしすぐ公開!というのは勇み足なので、テストしてローカルでの状態との違いを把握して、それから開示しないといけませんね。
▼教訓:テストしっかりしましょう!・・・orz
セッションとクッキーの使い分け
単純に自分だけのPCのローカルサーバで、クッキーとセッションの違いを把握するために動かすだけなら別に良いけど、公開して正式稼働を目指すなら、この辺ちゃんと整えないといけないな、という点。
セッション自体は利用サーバの機能を利用するため、負荷も高くなるし、何時間も保存しておくような用途としてはちょっと違うな、と。
あとは、そのサーバの機能によっても左右されるので、それならクッキー使う方が安定した稼働を望めそうなところ。
▼教訓:セッションとクッキーの違いを見直しましょう!・・・orz
あとがき
自分ひとりでは本当にどうして良いのか判らなくなったので、某方に質問し、助けて頂きました。
チャチャッと見てササッと判定し、原因を特定しちゃうところがやはりすごくて、こういうのが職業プログラマとアマグラマの違いだなぁ、と思ってみたり。
素晴らしいっす。。。丶(・ω・)ノ
時間割いて頂いて本当にありがとうございました。
他にもやってみたい点があるから、それらをぼちぼちと改修していこうー。