Neo Inspiration

Avatar

中の人:jakkrokk (HN統一しました) がphp,javascript,air,flex などなど好き勝手書いてます。仕事は主にWEBシステムの設計と開発、SEO全般など。

CakePHP 1.2で トップページにキャッシュを入れる

あちこちみてたんですが、やっぱりコアに手を入れるしかなさそう。

1.1だとこれかな。
http://raminasser.com/category/cakephp/

>>一応対策は書きましたが、 コアをいじらないでできる方法があったら教えて欲しいです。

問題は2点

1個目はCache読み込み部分

/cake/dispatcher.php の Line638
$filename = CACHE . ‘views’ . DS . convertSlash($url) . ‘.php’;

ようは $_SERVER['REQUEST_URI'] を convertSlash したものがキャッシュ名になるので、
http://www.a.com/ の場合の REQUEST_URI = / を convertSlash した null がキャッシュファイル名になってしまうわけです。

なのでエラーになってキャッシュが読み込めない。

2個目はCacheロード部分

/cake/view/view.php の Line808
$cache->here = $this->here;

ようは dispatcherで作成された $this->here を持ちまわしてそのままファイル名にするわけです。
なので、キャッシュを書き出すだけ(読み込まない)でよいのなら
controllerに

$this->here = “/コントローラ名/”;

をつけたすだけでOKです。

まあ これじゃあ役に立たないので・・・

ちゃんとキャッシュが動くようにすると

こうなります。

/cake/dispatcher.php の Line638の
$filename = CACHE . ‘views’ . DS . convertSlash($url) . ‘.php’;
この文の上にこれを付け足す

//例は toppages_controller を / にしている場合
if($_SERVER['REQUEST_URI']==”/”){
$url = “toppages”;
$this->here = “/toppages/”;
}

コアライブラリにハードコーディングですが、これで / もキャッシュできるようになります。

CakePHPのモデルがエンティティとして扱える!

あけましておめでとうございます(遅

すでにCakeを使った開発第2弾も佳境なんですが、
ここにきてやりたかったことが書いてあって
動揺していたりw

実装したいけど、もう時間がない!

CakePHPのモデルをエンティティとして扱う

http://wiki.cre8system.jp/index.php?PHP%2FCakePHP%2FCakePHP%A4%CE%A5%E2%A5%C7%A5%EB%A4%F2%A5%A8%A5%F3%A5%C6%A5%A3%A5%C6%A5%A3%A4%C8%A4%B7%A4%C6%B0%B7%A4%A6

あちこちで言われていますが、Cakeのモデルはエンティティともなんともいえない微妙な状態(エンティティではないけど)なので
$this->idは使えても $this->postname みたいなことはできない みたいな。

それを可能にしてくれるってことです。

Cake(というかPHPが?)元々ハッシュ地獄に近いソースになりがちなので、
こういう書き方ができるようになると
Cakeを使う利点が増えるようなきがするなー
しないかも。

次のプロジェクトのときは実装してみよう。

の前に検証だw

CakePHP hasAndBelongsToMany でページング(SQL LIMIT)とかを設定する

ひさびさCake触ると いろいろ新しい発見があるものです。。

Cakeでは仕様上

hasOne > LEFT JOIN
belongsTo > LEFT JOIN
hasMany > IDを元に該当テーブルをSelect
hasAndBelongsToMany > IDを元に接続テーブルをSelect

という形なので
Modelのアソシエーション単位で、条件の書き方が変わってくるので
そのメモです。

(続きを読む…)

Continue Next page

Twitter