cakephp

cakephp1.2 テーブルが無いけどModelのバリデートを使いたい場合

テーブルないけど、Modelのバリデートを利用したいデータがある場合。 モデルのuseTableをfalseにすればいいだけっぽい。

cakephp1.2 登録時と更新時で別のバリデートを実行したい&バリデートを複数定義して使い分けたい場合

保守という観点でもやっぱりバリデートはmodelにまとめたいところ。 array( // 登録時のみ 'unique_create' => array( 'rule' => 'isUnique', 'message' => 'err', 'on' => 'create', ), // 更新時のみ 'unique_update' => array( 'rule' => 'isUniqueUpdat…

cakephp1.2 urlに+(プラス記号)を含む場合、php側で元の文字が取得できない

cakephpで以下のようにパラメータに+を含む渡すメルアドを渡したところ、cakephp側で+が空白になってしまった。 http://test.jp/sample/mail+123@test.comどうやらurlに+を含んでしまうとmod_rewrite側でアンエスケープされてしまうらしい。 apacheが2.2.6以…

cakephp1.2 cake.phpが動かなくてどうしようもなかった件

ず――――と前から分からんくて、とうとう切れて適当に調べた件。Shellを継承したバッチコマンド(batch_name.php)があるとして、 以下を、コマンドラインから実行すれば普通にbatch_name.phpが起動する /usr/bin/php /var/www/html/test-test.com/cake/console/…

cakephp1.2 php5.3 Warning: strtotime()エラーを消したい

/app/config/core.phpの最後に以下を追加 date_default_timezone_set('Asia/Tokyo');

cakephp1.2 php5.3 Deprecatedエラーを消したい

php.iniに以下のようにすれば通常はdeprecatedエラーは非表示となる error_reporting = E_ALL & ~E_DEPRECATEDしかしcakephp1.2では個別にerror_reportingが設定されている箇所が何か所かあるようで、↑の設定をしてもdeprecatedエラーが表示されてしまうため…

cakephp1.2 フォームのselectで、ある値をデフォルトで選択状態にしたい

いつも忘れるのでメモ '2010', '2011' => '2011', '2012' => '2012', ); $form->select( 'list', $year, '2011', null, false ) ); 第3引数にデフォルト値を指定する。 第5引数をtrueにするとoptionの一番目に空欄が入る。フォーム — CakePHP Cookbook 1.2 …

cakephp1.2 JavascripHelperのlinkメソッドにパラメーターを付与する

いつも忘れるのでメモ link('sample.js?v=20150625');

cakephp1.2 updateの時はcreate()実行してはいけない

やばい。超今更だけど忘れてた。cakephpでsave()の前は当たり前のようにcreate()実行していたけど、それはinsertの時のみだった。updateの時に実行すると指定しなかったフィールドにデフォルト値が入ってしまう。なのでupdateの時はcreate()を実行しないか、…

App::importで任意のパスから読み込みたい場合

第4引数にパスを設定すればOK

cakephp1.2のafterfilterは必ず呼ばれるわけではない

cakephp1.2でbeforeFilterは必ず呼ばれるぽいけど、afterFilterはビューの存在しないアクションを指定したりすると、404NotFoundが発生して、afterFilterを呼ぶ前に終了する。

cakephpのmod_rewirteの設定について

ここが参考になる mod_rewriteの設定をCakePHP2,ZF2(Zend Framework2), WordPressの.htaccessを見て復習する。 - Qiita

cakephpで複数の文字列を含めたくない場合のバリデーション

うまくいかなくてアホみたいに1時間くらいかけてしまったので自戒の念を込めてメモ。以下、モデル内のバリデーション設定 array( 'allowName' =>array( 'rule' => 'isAllowName', 'message' => 'ご指定のユーザー名は使用できません', ), ) ); function isA…

cakephpのh()について

よく分かっていなかったのでメモ。cakephpのh()は、htmlspecialchars()のラッパー。htmlspecialchars()の仕様

cakephpのvalidateが効かなくてハマった件

いくらソースの中身を見なおしてもどこも間違っていない30分ハマった結果、modelのファイル名が、user.phpとなっていないといけないところ、users.phpとsがついていたのが原因だと分かった。エラーだせよcake。。

cakephp1.2 paginateのgroup by対策

paginateの条件に対してgroup byを使うとページ数が正しく表示されなくなる。具体的には、1ページ100件としてページングを設定していた場合、検索結果が1000件だったとしても、最初の1ページしか表示されない、といった症状が起きる。これのやっか…

nl2br の場合でも h 忘れないように

忘れてたのでメモ。もちろんタグの使用が不可の場合。

cakephpで物理削除時はdeleteかdeleteAllを使う

いっつも忘れて以前のソースを探す時間を毎回ムダにするのでまとめておく。 Model->delete($id)) { // 成功 } // deleteAllの場合 $param = array('xxx_id' => $id); if ($this->Model->deleteAll($param)) { // 成功 } テーブルのidを指定して削除するとき…

DEBUG時のクエリの行数を変更する

今日知ったんだけどDEBUG=2の時にログに出るSQLって、DBごと?に200件までらしい。 なのでそれを調整する方法。/cake/libs/model/datasources/datasource.phpの126行目あたりの var $_queriesLogMax = 200; の値で調整可能。 ただし6000件以上に設定するとま…

ComponentからComponentを呼び出したい場合

普通は以下のように書く class Sample1Component extends Object { var $components = array('Sample2'); // $this->Sample2でアクセスできる しかしこれだとShellからSample1Componentを読んだ場合に、Sample2Componentの処理でエラーとなってしまうので、r…

cakephpのpaginateでINNER JOINをしたい

久しぶりにハマったのでメモ。paginateを使っている場合、通常のfindのようにbindModelにtypeでinnerとか指定してもできない。下記のようにする。 $this->paginate['joins'] = array( array( 'type' => 'INNER', 'table' => 'db1.table2', 'alias' => 'Table…

cakephpでHTMLの先頭に改行(空白行)が挿入される件

少しはまったのでメモ。 モデルとかでphpの終端タグ(?>)の後に改行が入っていると起きる。 終端タグの入っているソースを丸っとコピペすると起きやすいかも。注意。

CakePHPでモデル内から別モデルを呼ぶ方法

通常は下記の方法 App::import('Model', 'AnyModel'); $AnyModel = new AnyModel(); hasOneやbelongsToで関連付けされていれば下記でOK $this->AnyModel

hasmanyのテーブルに対して条件を設定する方法

del_flg = 0のhasmanyテーブルを取得したい例 $this->[モデル名]->hasMany['関連モデル名']['conditions'] = '関連モデル名.del_flag = 0'; $data = $this->[モデル名]->findAll()) foreachを使えば、hasMany 内のテーブルが増えても大丈夫 foreach ($this->…

bind、unbind、recursive を使う際の注意点

コントローラーでモデルを呼び出し、そのモデル内でbindModel等している場合、そのbindModelの設定は、コントローラーの処理が終わるまで引き継がれるため注意。 一回のアクションで何度も同じモデルを呼び出すこと自体、おかしい事も考えられるため効率が悪…

モデル内でbelongsToテーブルに条件を設定する方法

モデルAとBはbelongsな関係を持ち、 モデルBとCはhasOneな関係を持つ時、 モデルA内で $this->B->hasOne['C']['conditions'] = 'C.point < 0'; とすれば C.point < 0 のデータのみ取得できる。 ※ただしAとB自体は条件を満たさないデータも取得され、 あくま…

モデル内でbelongsToテーブルのリレーションを解除する方法

モデルAはBとbelongsToな関係 var $belongsTo = array('B'); モデルA内でBのhasManyテーブルであるC、Dを解除したい $this->B = new B(); $this->B->unbindModel(array('hasMany' => array(C,D))); $this->recursive = 2; return $this->find('all'); ※$this…