by shigemk2

当面は技術的なことしか書かない

cakephp

beforeSaveとバリデーション

502 Bad Gateway 上のリンクにもソースコードにも書いてあるけど、バリデーション→beforeSave→saveの順番で実行されるので、 場合によってはバリデーションが意味ない場合があるので注意すること。beforeValidateを使うのもいいかもね。

queryメソッド

502 Bad Gateway query(string $query) モデルの query() メソッドを使用すると独自の SQL 呼び出しを作成できる。unionとかはfindに実装されていないので…ちなみに、query() は、モデルの呼び出しとは本質的に分離した機能で、 $Model->cachequeries の状態…

CakePHPでデバッグモード以外でもPHPのエラーログを取る

メモ。CakePHPでデバッグモード以外でもPHPのエラーログを取る超簡単な方法 » INSPIRE TECH例えば、その状態で致命的なエラーが発生しても、画面が真っ白になったり、 ErrorHandler::error404メソッドが実行されるだけで、 どこかで能動的に$this->logなどで…

find('count')をやるときの注意

502 Bad Gatewayfind('count') では、 fields に配列を渡してはいけない。 DISTINCT カウントを行うフィールドだけを指定するようにする。 そうすることで、条件に従った結果が常に同じになる。つまり、 Article->find('count', array( 'fields' => 'DISTINC…

引数チェックについて

モデルでやるべきかコントローラーでやるべきか 若干迷うところであるが、 「迷ったら両方やる」ということで、 両方やる。

cakephp の timer と、Peak Memory Use

cakephp の右上のケーキのアイコンをクリックすると、 こんな感じのメニューが出てきます。 History Session Request Sql Log Timer Memory そのなかのTimerをクリックすることで、ページを表示する処理にどのくらい時間とメモリがかかったかを 知ることが出…

unbindModel

検索でアソシエーションを使いたくないときは、unbindModelを使う Model->unbindModel(array('belongsTo'=>array('hoge_model'))); ... recursiveを-1に設定してもよいのだが、挙動が分からないときがあるらしい。 recursiveを2に設定して、hasManyとhasOne…

findとオプションの指定

CakePHP Note (v1.3) > モデル > データの取得 | GARACTERfindの引数でrecursiveとかfieldsとかを指定できるけど、 それをやるのは面倒なので、こういうふうに書くことも出来る $options['fields'] = array('Post.created','Post.title'); $this->Post->find…

_メソッドの判定

CakePHPの処理の流れを追ってみよう - d.hetimaコントローラー内で、_で始まるメソッドはアクセスできないようになっているが、 どのようにアクセスできなくしているのだろうか。1. app/webroot/index.php の $Dispatcher->dispatch($url) でクラスのメソッ…

メソッドのソースコードの場所

cake/libsにあらかた置いてあります。

モデルのファイルで別のモデルを使う

いくつかパターンがあるが、 Othe…

クエリのデバッグ情報について

第11回 CakePHPの「DEBUG値」を極める!:CakePHPで高速Webアプリ開発|gihyo.jp … 技術評論社core.phpで、DEBUG値を2に設定すると、 DBへのクエリーのデバッグ情報が以下のように出力される。 3 queries took 1 ms Nr Query Error Affected Num. rows Took …

実行速度を計測してみる

プログラムの実行速度を計測したいときは、

テスト関数名を日本語にする

createValidUser(); $user->setAge(null); $user->assertFalse($user->isValid()); $user = $this->createValidUser(); $user->setName(null); $this->assertFalse($user->isValid()); } こんなふうに、関数名を日本語にすることも可能なようだ。PHPUnit で…

ビューを意識しすぎるコントローラーは作成してはいけない

タイトルそのままなのだが、 ビューを意識しすぎるコントローラーだと必然的に ビューの可読性と見た目が悪くなってしまうので、 あまりやるべきではない。

cakephpの規約チェッカー

CakePHP 規約ワードメーカー WordMaker for CakePHP Conventionscakephpの規約に沿ってモデルだのクラスだのが定義されているかを チェックするサイト(javascriptが有効になっていることが条件)複数形ってやっぱり難しいですよね。

Configure::write

設定情報を記録する。 Configure::write($config, $value) $config…設定名 $value…設定値 Configure::writeで登録した情報は、Configure::read()でどの場所からでも呼び出せる。Pocket詳解 CakePHP辞典作者: 滝下真玄出版社/メーカー: 秀和システム発売日: 2…

引数のデフォルトを指定する

まあこんなコントローラーがあったとして、

コンポーネント内でのみ使える関数の定義

アンダーバーを2回使います。 component->__hoge(); } みたいな感じで。 アンダーバーを2回使うことで、関数のスコープを小さくできる…のかな?

markTestIncomplete

実際のコードがまだ実装されていないことを表示させたいときは、 markTestIncomplete( 'このテストは、まだ実装されていません。' ); と書く。追記: 第9章 不完全なテスト・テストの省略 これはPHPUnitの関数で、Simpletestには実装されておりません。 すみ…

find のconditionで like を使う。

404 Not Found "%magic%" ); $hoge = $this->Post->find('all', array('conditions' => $condition)); magicを含む文字列が記録されたtitleカラムのレコードをサーチできる。 なお、 "%%" ); $hoge = $this->Post->find('all', array('conditions' => $c…

assertPattern と assertNoPattern

DCWiki boolean assertPattern (string $pattern, string $subject, [string $message = "%s"]) 特定の文字列に指定したパターンがマッチすれば成功。パターンはPerlの正規表現で記述する。バージョン1.0.1alpha以降で利用できる。 assertPattern($pattern, …

assertNull と assertNotNull

DCWiki boolean assertNull (null $value, [string $message = "%s"]) このメソッドは、引数の型がNULL以外の場合テストに失敗する。 以下のテストは両方とも成功。 assertNull($target, 'type is ' . gettype($target)); //未定義の変数はNULLなので成功 $t…

テストケースを作成する

bake コマンドを利用する。

カバレージを上げるためのコツ

条件分岐があるときは、全ての分岐を通るような複数のテストコードを書くことが 大切である。

テストコードを書くとき

カバレージを100%に近づけること。データを直接書くのはスマートではないため、 定数をbootstrap.phpあたりに定義して定数の値を利用すること。

defineの記述場所

define(HOGE_ID, '1135'); とかいう定数を書きたいときは、 bootstrap.phpに記述する。追記: 各コントローラのファイルにも書ける。 bootstap.php に書くと、どの関数からも参照できる。 ただし、クラスの外に記述すること。

デバッグレベル

CakePHPのcore.phpの設定を勉強!! - 子だぬきの技術習得ノート こちらより。 0 = 運用モード 1 = エラーと警告を表示 2 = エラーと警告、SQLを表示 3 = エラーと警告、SQL、コントローラのdumpを表示0だとエラーメッセージが出ないので、エラーになっても…

cakephpのキャッシュ

CakePHPのcore.phpの設定を勉強!! - 子だぬきの技術習得ノート こちらより。通常はapp/tmp/cacheとかに纏められているわけだが、 APCを使うとサーバーのメモリにキャッシュが蓄えられる。なお、 'File')); ?> キャッシュの保存場所やエンジンの指定できる…

バリデーションの挙動

モデルで複数のフィールドにvalidationを設定していて、 一つでもvalidationに引っかかった場合、レコードは全く更新されない。 (validationを通過したフィールドだけレコードを更新するということはない)