FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

CakePHPでAuth認証後のバグ

  • 2012/04/04 12:45
  • Category: CakePHP
cakePHP1.3でAuthを利用する場合、インストールパスとコントローラ名を同じ単語(複数形でも)にすると認証後に「/s」という訳わからんURLに飛ばされるバグが存在する。例えば「/hoge/hoges/index」だと認証後に「/hoge/s/index」へ飛ばされてmissing controller error: controller could not be found. となる。リダイレクト先のURL生成するのに部分一致とかやってて失敗してるんだろうなぁ。面倒だから深追いせずコントローラ名を変えて対応しました。
スポンサーサイト

CakePHPでCSV出力とファイル化されない件

  • 2012/03/27 12:51
  • Category: CakePHP
CakePHPでCSV出力するはめになりこちらのCSV Helperを使わせていただくことになりました。さくさくとhelpersにアップロードしコントローラで読み込み指定しサンプルの通りctpファイルに書いていざ実行!・・・CSVがブラウザに文字列として表示される。つまりHTMLドキュメントとして読み込まれてるわけ。ヘッダがうまく渡ってないっぽい。またCSV Helperの当該部分をいろいろ書き換えて試行錯誤してみたがダメ。ふと気がついてctpのConfigure::write('debug', 0);の記述を外してみたら「Helperの末尾で既にヘッダ出力してるからダメよ」のエラー。え?と末尾を見てみると、?>というPHPの閉じの後にスペースが入ってました・・・。ということで、既存サイトからコードをコピペダウンロードするときはスペースにまで気を配りましょうというお話。

CakePHPのビヘイビアの関数の引数でハマる件

  • 2012/03/24 21:58
  • Category: CakePHP
CakePHPではM(Model)V(View)C(Controller)それぞれで共通関数の置き場を持っている。Viewではelements, Controllerではcomponents, そしてModelではBehavior。ただしそれぞれの呼び出しは癖が異なる。特にModelにおけるBehaviorは困る。CakePHP的記法だと、Model内で$behaviors = array('なんとか')でよさそうに思うがさにあらず。$actsAs = ('Nantoka')でなくてはならない。ついでにactAsではなく、actsAsとsをつけるのを忘れがち。これを忘れると、Modelを未定義関数で呼ぶことになり、それって$this->query('その関数名')と等価に評価されるので、SQLエラーとなる。やだよこの仕様。

今日はさらに加えてハマった。ビヘイビア内で関数を作る際、Model内から直接呼ばれる場合、第1引数には必ず呼び元Modelのインスタンスが入ってくる。なので、

class HogeBehavior extends ModelBehavior {
function getHoge($aaa, $bbb) {
return $aaa;
}
}

てなビヘイビアと関数がある場合、Modelから

echo $this->getHoge(111,2222);

とか呼び出すと、てっきり「111」って表示されそうだけど、Warning (4096): Object of class Nantoka could not be converted to stringと怒られる。オブジェクトを文字列に変換できませんよ~と言っているのね。つまり$aaaにModelのインスタンス入ってしまっているのですね。なので、ビヘイビアの関数の第1引数では呼び出し元Modelのオブジェクトを受けてあげないといけません。さっきの例なら以下の通り。

class HogeBehavior extends ModelBehavior {
function getHoge($obj, $aaa, $bbb) {
return $aaa;
}
}

CakePHPでmod_rewirteが動かない件

  • 2012/03/23 12:18
  • Category: CakePHP
ということで本番サーバに複写したCakePHPアプリ、とりあえず初期画面はでるようになったが、mod_rewriteが動いてないという真っ赤な警告が。う~ん?httpd.confでAllowOverride Allあたりを確認してみたけどちゃんとしてるし、モジュールもある。なんで?なんで?・・・で、ずっと見てったら、ルートの.htaccessコピーされてなかった(´;ω;`) えーと、Windows7ってファイルコピーの時、.で始まるファイルを避けて通るの?子ディレクトリのものはちゃんとコピーできてたので不思議・・・。

CakePHPで画面が真っ白の件

  • 2012/03/23 12:13
  • Category: CakePHP
CakePHPで開発したアプリを本番サーバにコピーしたところ、画面が真っ白。何も表示されない。ルートのindex.phpに色々書いてどこまで通っているのか調べてみると、最後の行のrequireで、app/webroot/index.phpがインクルードできてない。APPとかWEBROOTとかDSといった定数ではなく、パスを直接書いてみても、ダメ。30分くらい考え込んだが、結局、file_existsで当該パスが存在するか確認したところ「否」と出たことで気がついた。あ、パーミッションだ(´;ω;`)
ということで、CakePHPで画面真っ白の際は、ルートディレクトリ以下「chown -R apache:apache」することをオススメ。

Pagination

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。