Invalid signature

ここは俺の日記帳

false の逆が true とは限らない。

CakePHP v2.4.6

チュートリアルの一部の動作結果について調べたいことができた。
以前にチュートリアルで使った環境はいろいろいじくり回してあったので、
前に作った、使いやすいように解凍後の状態に一部修正を加えた Cake のソース郡
を用いてチュートリアルのコードを走らせたところ、以下の様なエラーが出た。


     Table 1 for model Post was not found in datasource default.
  

「Post」ってのはこの環境固有のものなので、「Post」以下で検索をかけた。
すると、キャッシュの問題だという記事を見つけた。

http://blog.katty.in/2054
http://blog.gti.jp/cakephp%E3%81%AB%E3%81%BE%E3%81%9F%E3%80%80%E3%81%97%E3%81%A6%E3%82%84%E3%82%89%E3%82%8C%E3%81%9F%E3%83%BB%E3%83%BB%E3%83%BB-missingtableexception/

しかし app/tmp/cache/models/ のファイルを削除しても結果は変わらなかった。

しかたないので「Table 1 for model」の方で検索したが、IRC のログと CakePHP
フランス用の掲示板の記事しかみつからなった。 フランス語は読めないし、
IRC の方も解答は出ていなかった。

そこで解凍直後のプレインな cake のディレクトリと、手を加えた方のディレクトリを
比較したら答えは見つかった。
以前にテーブルを使用せずに動かしたい事があり、また同じことがあるだろうと
上で使用している、コピー用の AppModel に以下の様なコードを記述した。


	var $useTable = true;	// DB を使わない場合は false
  

テーブルを使わない場合は $useTable を false にするということを知り、
これが「テーブルを利用する or しない」を判別するための真偽値だと思って
こういう記述をした。
しかし $useTable は真偽値型の変数ではなく、使用するテーブル名を指定する
変数だったため、true = 1 と解釈され、エラーメッセージの Table 1 につながった。
文字列型が空と指定する時は NULL やら \0 やら "" を入れるという先入観か
あったため、結構ハマってしまった。