CakePHP

CakePHP2 のモデルで PostgreSQL のシーケンスを指定する方法

CakePHP では、PostgreSQL の主キーに設定するシーケンス名がデフォルトと異なる場合、Model::sequence に書くことで対応できるのだが、CakePHP 2.1 から「スキーマ名 . シーケンス名」という書式が前提になっていた。

Migrations プラグインがサポートするデータベースは MySQL のみ?

https://github.com/CakeDC/migrationsCakePHP のデータベーススキーマの管理用に Migrations プラグインがある。 Migrations プラグインで残念なことは、CakePHP の Schema クラスがサポートしていないクエリはプラグイン内部 (CakeMigration クラス)で SQL…

CakePHP 2.x キャッシュファイルのパーミッション変更

cake コマンド実行するユーザと apache のユーザが異なる場合、キャッシュ周りでパーミッションエラーが発生してしまう。誰でも書込みできるように権限を設定するには、Cache::config() に "mask" というパラメータを追加してやるとよいらしい。 また、設定…

CakePHP 2.3.0 上の Migrations プラグインの注意

CakePHP 2.3.0 が正式にリリースしたのだが、 Migrations プラグインの master ブランチでは 2.3.0 は、未対応。公式な解決策としては、develop ブランチを使うといいとのこと。https://github.com/CakeDC/migrations/issues/107とりあえず master ブランチ…

CakePHP 2.3.0-beta を試す

CakePHP 2.3.0 ベータ版がリリースされたとのこと http://bakery.cakephp.org/articles/lorenzo/2012/10/28/cakephp_2_3_0-beta_releasedちょっとうれしいお知らせとしては、モデルで biginteger をサポートするとのこと。 PostgreSQL で試したところ、まだ…

CakePHP 2.0 で単体テストの debug() が効かない件

いつの間にか、単体テスト実行時の debug() が効かなくなっててどうしたものかと悩んでいたところ、以下にヒントが書かれてあった。 http://book.cakephp.org/2.0/en/development/testing.html#installing-phpunit All output is swallowed when using PHPUn…

CakePHP 2.0.3 の PaginatorHelper の不具合?

CakePHP 2.0.3 のページングのリンク先が、どうもおかしい。PaginatorHelper::prev() や next() で、複数のソート条件がある場合は、正しく動作してくれない。良くわからないのだが、PaginatorHelper::link() の一部をコメントアウトして対処。多分副作用が…

Debian squeeze の nginx 上で CakePHP を動かしてみた

さくらVPS で一番安いサービスを利用するときにネックになるのがメモリ消費量。 メインメモリが 512MBしかなく、apache2 ではやや不安なので、nginx を使ってみようかと画策中。Debian squeeze の nginx 上で php の環境を作るときに、参考にしたのがこちら…

CakePHP で簡易なPDFを作成する

CakePHP 2.0 で、簡易的ではあるが PDF を作成する方法を2つ試してみた。 View (PdfViewクラス) を作成する方法 View レイアウト (pdf.ctp) を作成する方法 [オススメ] HTML から PDF が生成できるのであれば、CakePHP の View の変更で HTML/PDF を切り替…

CakePHP 2.0.1 の Content-Length がおかしい?

CakePHP 2.0.1 がリリースされたわけだが、Content-Length がおかしいのではないかとのこと。 ソースをのぞいてみると・・・lib/Cake/Network/CakeResponse.php @@ -347,7 +350,11 @@ class CakeResponse { $codeMessage = $this->_statusCodes[$this->_stat…

CakePHP でバッチ処理を組むときの注意

CakePHP でバッチ処理を組む際、Model::cacheQueries が true の状態で、Model::find() を繰り返すとあっという間にメモリ不足に陥ってしまった。バッチ処理中に同じクエリを利用することはないため、クエリのキャッシュを無効化した。例1: バッチ処理のため…

CakePHP 2.0 でライブラリの読み込み

CakePHP 1.3 では、何でも App::import() 関数を使ってライブラリを読み込んでいたが、CakePHP 2.0 は、若干手が加えられている。 App::import() は、引き続き利用可能ではあるが、新たに App::uses() 関数が追加された。ネーミング的に前バージョンまでよく…

HtmlHelper::loadConfig() にハマる (CakePHP 2.0.0-RC3)

CakePHP 2.0.0-RC3 で早速つまづいた。はじめは、バグなのかドキュメントの誤りなのか、判断できずにいたのだが、HtmlHelper で生成されるタグを変更するために HtmlHelper::loadConfig() を使おうとして、うまく動かせられなかった。(APIドキュメント側の誤…

CakePHP 2.0 はじめました

CakePHP は、1.2.0-beta2 から利用し始めて 3年くらいになるけど、最近はちょっと気持ちが離れていました。 CakePHP 2.0 の RC2 がリリースされたことで、いい機会なので、今度準備中のシステムに使おうと画策中。 リハビリがてら、ざっくり管理画面系を作っ…

CakePHP の Model::find() の条件式 (NULL の扱い)

CakePHP 1.3 にて、 Model::find() の条件式で NULL の扱いを考慮する必要があった。 "IS NULL" を表現したい場合 条件式: null); Where句: WHERE "hoge" IS NULL "IS NOT NULL" を表現したい場合 条件式: array('hoge' => null)); Where句: WHERE NOT ("h…

CakePHP の Session.checkAgent

CakePHP 1.3 のサイトを IE8 で閲覧するとセッションが切れてしまう問題に遭遇した。CakePHP には、デフォルトでは、同一セッションで User-Agent が異なるリクエストがあった場合は、セキュリティ的によろしくないということで、セッションを削除してしまう…

CakePHP で form の inputDefaults

http://d.hatena.ne.jp/honestnaoko/20100917/1284688508より。CakePHP 1.3 では、FormHelper::create() のオプションに "inputDefaults" が追加された。 http://book.cakephp.org/ja/view/1639/x7-3-1-5-options-inputDefaults Form->create('User', array(…

CakePHP のソースコードチェック

作成したアプリのソースコードが CakePHP の規約に沿っているかどうかのチェックや修正ができるシェルコマンドがあった。http://github.com/petteyg/code_check インストール 1. コードを取得する。 # git clone http://github.com/petteyg/code_check.git2.…

CakePHP 1.3.1 にて Schema シェルを使う

CakePHP 1.3.1 にて Schema シェルでデータベースのテーブル定義の操作を行いたい。 まだ、挙動がつかみきれていないが、理解した時点のメモを残しておく。 コマンドのヘルプ 困ったときはヘルプを参照。 cake schema help schema.php の生成 データベースを…

CakePHP のプラグイン内でAuthコンポーネントを使うには

CakePHP 1.2 と 1.3 で微妙に挙動が違うのであせったが、プラグイン内でAuthコンポーネントを使う場合は、コントローラの beforeFilter() 内で Auth::loginAction を指定しておくとよい。 Auth->loginAction = '/プラグイン名/users/login'; } } loginAction…

CakePHP 1.3RC4 での気づき

CakePHP 1.3RC4 をちょっと試してみた。 Session コンポーネントがデフォルトでは読み込まれない(明示的に指定する必要あり)。 という点が CakePHP 1.2 と違った。ふむ、移行ガイドにしっかり書いてあるではないか。 http://book.cakephp.org/ja/view/1564/C…

CakePHP で配列をモデルとして定義するための DataSource

CakePHP には外部のリソースを呼び出すための便利なフレームワークがある。DataSource を実装すれば、データベース以外のリソース(たとえばテキストファイルなど)がモデルとして利用できるようになる。http://d.hatena.ne.jp/gapao/20090521/1242907727 を参…

ログ出力で Out of memory

どういうわけか、CakePHPを使ったバッチ処理で CakeLog::log() でログ出力をしていると 激しくメモリーを消費してしまう。特にPHP4 だと顕著だ。 なんでだろう。

CakePHP で複数チェックボックス(その4)

過去の記事: CakePHP で複数チェックボックス(その2) CakePHP で複数チェックボックス は、CakePHP 1.2 RC2 で確認していたのだが、いつの間にか(RC3?)仕様が変わっていたみたい。CakePHP 1.2.2 で上記の方法を試すと、期待通りの動作をしなくなっていた。…

Shell でテンプレートを使う

CakePHP の Shell でテンプレートを使うときは、ViewTask が便利みたい。 http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=thread&topic_id=1774&forum=3&post_id=4224#forumpost4224

配列の年月日と時刻を文字列に変換する

CakePHP では、フォームから渡された日付データは配列になっている。このままでは、データベースでは扱えない。 そのため Model::deconstruct() という関数(メソッド)がある。たとえば、 string(4) "1981" ["month"]=> string(2) "04" ["day"]=> string(2)…

CakePHP のバリデーションの注意点

どうやら、配列のキーが存在しない場合、バリデーションはスルーしてしまうみたい。http://www.1x1.jp/blog/2007/04/cakephp_model_validates.htmlこれはCakePHPの仕様だと思うのだが、マニュアルには書いてなかったので、ちょっと焦った。簡単な対処法は、…

CakePHP 1.2 の Pagination (その2)

以前、CakePHP 1.2 の Pagination について調査していたが、ビューの中で "$paginator->option(array('url' => $this->passedArgs));" などとオプションを指定するのがどうもしっくりこなかった。オプションの記述場所をコントローラに移したかったのだが、 …

CakePHP 1.2 でステータスコードを指定する方法

CakePHP 1.2 で、ステータスコード(404, 500)を指定したい場合は、エラーハンドリングの仕組みを利用する。http://book.cakephp.org/view/154/Error-Handling cakeError('error404'); また、リダイレクトの際にもステータスコード(301, 302)を指定する引数が…

CakePHP 1.2 でデフォルト値の設定

CakePHP 1.2 にて、新規作成用のフォームにデフォルト値が入っていてほしい。適切な例とは言い難いが、仮に Userモデルを新規作成時に username のデフォルト値を設定してみる。その方法は3通りある。1つめの方法がシンプルで良さげ。 その1:テーブル定義…