CakePHP

joinsの設定を使う場合

メモ。 pagerやfindでデータを抽出する設定$optionsで、joinsによりINNER JOINなどを行う場合、 database.phpにてテーブルのprefixを設定すると正しく動かなくなる。 その対策。

モデルでURLのパラメータ(params)を取得する

コントローラでは、$this->paramsで得られる値:例えば$this->params['prefix']や$this->params['admin']を、 コントローラ・コンポーンネント以外で得る方法。

FireFoxのアドオンでCook Bookをカスタマイズ表示

CakePHPのオンラインリファレンス、CookBookのデザインが新しくなりました。 http://book.cakephp.org/ja# 内容は一緒ですが、デザインが大幅に変わり、また検索結果の出力が非同期表示になるなどの違いがあります。 しかしながらこの新デザイン、個人的に、…

TagsPluginの導入

CakeDC様配布の、CakePHP用タグ付けプラグイン TagsPluginを導入しました。 http://cakedc.com/downloads/view/cakephp_tags_plugin 導入時のトラブルや、実際の挙動、そしてタグ削除・タグクラウドを表示する際の疑問点などがあるので、それらについて記載…

UtilsPluginの内訳

下の記事で存在を知ったのですが、 CakePHPに、様々な「ちょっとした処理」を追加できる UtilsPlugin という便利なものが配布されています。 http://1-byte.jp/2011/01/06/open_trivist/ しかし、公式ページ(ver.1.1)や、READMEを読んでも、何にどうやって使…

Mediaプラグインのver.1.2->1.3バージョンアップ

CakePHPをver.1.3にアップしたのに伴い、 1.2時代から導入+拡張コンポーネント入れて独自遣いしていた、Mediaプラグインも、1.3b*1にアップデートしました。その際の、トラブル解消過程のメモです。 * 注 1.「独自拡張」由来の不具合が混ざっているかもし…

saveAll()を使う時の注意

saveAll()を使うと複数のデータを一括で保存できます。 大変便利ですが、 セットするデータの形式に、注意が必要です。

同じModelに複数の関連付け

たとえば、メッセージ機能で1つのテーブルに from_user_id と to_user_id があって、Userと2つ以上の関連付けを持つ場合の方法。

$paginator->sortで、現在ソート中の見出しに↑↓がつく

前記事で、謎記号が出力されている問題。フォントサイズを拡大してみて、解明しました。 上下矢印です。 (参考画像のフォントサイズ:24px/通常12px) どうやら、「現在この項目の昇順/降順でソートしていますマーク」らしいです。 ソート項目を変えると、矢印…

DebugKit+IEでのエラー緩和

CakePHPでの開発に非常に便利なDebugKit。 しかし、IE*1でのみ、謎のエラーが発生する場合があります。 CakePHP1.2の頃は、そもそもIEでは動作しなかったのですが、 その対応用のパッチを当てると、1.3用で発生しているエラーも多少緩和されるようです。 (追…

謎文字

CakePHPを1.3にバージョンアップしたら、 pagenateのソートリンクに謎の文字が表示されるようになったのですが・・・・これは何?? 謎文字の特徴 当該箇所のソースには何もない。コピー&ペーストしても、何もない 多言語化(i18n)対応箇所 出ない場所もある…

allowEmpty設定とフォーム

CakePHP1.3では、validateにallowEmpty => true を明示しない項目は、 フォーム自動生成時に、ラベルの後に赤文字で * が表示されるようになります。 例 名前 * 表示させたくない場合は、allowEmpty => trueを明示するしかないようです*1。 *1:ver.1.3.6

「コントローラでキャッシュする」指定方法が変更になっている?

CakePHPでは、アクション単位でキャッシュ有無の指定を行うことが出来ます。その場合、 var $cacheAction = array( 'view/23/' => 21600, 'view/48/' => 36000, 'view/52' => 48000 );などのように記載するよう、解説されていますが、 これはver1.2までの仕…

CakePHP1.3のキャッシュ不具合

CakePHPのバージョンを1.2.5から1.3.6に上げたところ、一部のページで、指定と異なる内容が表示されたりするようになりました。原因は、キャッシュの不具合。 ファイル名の正規化などを行うInflector::slugの不具合のため、異なるページのキャッシュが同一名…

Ver1.2->1.3でvendorPathsの設定不備によるエラーの解消

CakePHPのverを1.2から1.3にあげると、既存のソースで Configure::read('vendorPaths') の設定を用いていたため、エラーが出る場合の解消法。 $vendorPaths = array_values(App::path('vendors'));を代わりに使えばよさそう。

要ログインページのURLをメールから直接開けないケース

要ログインページのURLをメールで送信して開いてもらった場合、 ログイン後の遷移先が、指定のURLではなくRouting.basePathになる場合があります。 Yahooメールで確認しましたが、他のブラウザメールでも発生するかもしれません。 メールアドレス登録確認な…

ロールバック

CakePHPはロールバックも簡単でした。何らかの条件分岐でsave()処理を巻き戻したい場合の記載方法。http://book.cakephp.org/ja/view/1633/Transactions

 Elementキャッシュ

ホームなど、ポータル系の画面で 新着情報エリア 自分の情報エリア RSS情報エリア ・・・などのように更新タイミングが分かれている場合は、Elementキャッシュがよいようです。Elementキャッシュ導入で、参考にしたのは以下。 http://text.tklabo.net/blog/8…

ビューキャッシュ(2) キャッシュ読み込みタイミング

特定のURL(ビューキャッシュが作成されると、その後、同じURL(model/action/parms)にアクセスしても、コントローラ・モデル・ビューなどの処理を一切通過しなくなります。 その処理は、Dispacherの中にありました。

モデルキャッシュの検証

前述の通り、表示が劇的に速くなるビューキャッシュですが、若干問題点があります。 特に、閲覧者権限によって、1つの画面に表示/非表示させる部分が複数存在する場合。 前述の通り、cake:nocache でキャッシュせず毎回判断する方法もありますが、数が多いと…

ビューキャッシュ導入(1)

ビューキャッシュ導入(途中経過)時の追加・変更点と、効果について。導入方法は概ね各種サイトの情報通りですが、設定ファイルでキャッシュの有効期限を設定できるようにしました。

ビューキャッシュとDebugKitプラグインの関係

まず、ビューキャッシュを導入しました。導入方法は基本的に、ネット上あちこちにある紹介の通りなのですが、一箇所トラブルがありました。 DebugKitプラグインが動作していると、ビューキャッシュされません。 core.phpでdebug設定を0にすれば解決ですが、…

負荷測定

CakePHPベースの自作アプリケーションのα版を公開環境においてみて一番問題だったのは、負荷でした・・・ アクセス〜表示に数秒かかるとは。 アプリ内部の追加や修正が一通り見込みついたところで、負荷対策開始。 手始めとして、実際に負荷を測定して「見え…

SecurimageでCAPTCHA導入

CakePHPに、CAPTCHA機能PHPライブラリ「Securimage」を導入してみました。

CAPTCHA導入方法

CakePHPにCAPTCHAを導入する方法のメモ

さくらインターネットレンタルサーバにセットアップした際の2つの問題

さくらインターネットレンタルサーバにCakePHPをセットアップする方法はネットに各種情報がありますが、それらですぐには解決方法が見つからなかった点が2点ありました。 mediaプラグインでアップした画像が表示されない データ保存前に Sanitize::cleanを行…

SourceForgeにCakePHPをセットアップする場合

SourceForgeのWebホスティングサービスにCakePHPをセットアップする場合、app/webroot あるいは Webroot/ 以下の .htaccessに RewriteBaseの設定追加が必要です。 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /[設置dir名] RewriteCond %{REQUEST_FILENAME} !-d RewriteC</ifmodule>…

インストーラ改修(4) テーブルprefix対応

DBのprefix設定に対応してみました。 2010/04/19 1つのDBに複数をインストールする場合のために、外部キ−名にもprefixを適用追加が必要でした

インストーラ改修(3) インストール前に権限チェック

インストーラのindex()アクションで、事前にインストール&運用に必要なディレクトリやファイルの権限チェックと表示を追加しました。

installプラグインの削除について

インストールプラグインでは、インストール完了後に 「Click here to delete installation files」 という処理を行なう事が出来るのですが、これが正しく動かない場合があります。これは権限設定の問題で、正しく動く条件は app/plugins/install 以下が全て …