読者です 読者をやめる 読者になる 読者になる

cakephp1.2 キャッシュエラーになる原因について

cakephp使っているとたまにキャッシュファイルがunlink出来なかったとかtouch出来なかったとか出る時がある。通常アクセスが多い場合等、同時アクセスが起きた時に発生する場合があるらしいが、別にアクセスはほとんど無いのにキャッシュエラーが頻繁に起き…

cakephp1.2 スマホ判定

appController内でRequestHandler読み込んでbeforeFilterの中で以下のようにする。 RequestHandler->isMobile()) { $this->view = 'theme'; $this->theme = 'mobile'; } こうするとviews/themed/mobile/controller/index.ctpみたいな感じでthemed/mobile内を…

cakephp キャッシュ周りがおかしい場合はキャッシュしないようにすること

モデルで少しトリッキーなことをしたらキャッシュが悪さをしてしまい機能によって動いたり動かなくなったりしてしまった。そういう場合はもうキャッシュ自体を無効にしてしまうことも検討すること。以下で無効にできる。

cakephp1.2 componentの__constructについてメモ

コンポーネントで初期化処理したい場合は__constructを使えば問題無い。[ステップアップ! CakePHP] Controller で Component を使う | バシャログ。 ただしここにもあるように通常はinitializeかstartupを使う。__constructとの違いはShellとかでcomponent…

cakephp1.2 Shellからモデルとコンポーネントを呼ぶ方法

コントローラーであれば$usesと$componentsを使うけど、Shellの場合は$usesは使えるけど$componentsは使えない、というなんとも中途半端な感じだったのでメモ。以下のようにする。 Sample = new SampleComponent($this); } } 資産…

cakephp1.2 componentの$enabledでNoticeが出る件

本来componentを使うと$enabledがセットされるんだけど、beforeFilter()の中でcomponentをnewしてしまうと、$enabledが定義される前にstarup()とかを呼んでしまい、Noticeが出るのでcomponentをbeforeFilter()の中でnewしないこと。$enabledはcomponentのsta…

cakephp1.2 database.phpのdefaultに設定されているDBのテーブルはModelファイルの作成が必須ではない

ClassRegistry::init('ModelName');こんな感じでmodelsフォルダに存在しないModelを読み込んでいた場合に、何故かエラーになる場合とならない場合があって1時間くらいはまってしまったのでメモ。どうやらdatabase.phpで$defaultに設定されたDBのテーブルだと…

cakephp1.2 通常のSQLとO/Rマッパーとのselectの結果の違い

今更だけどメモ。cakephpでO/Rマッパーというかfindとかした時の結果と、通常のsql(query)を実行した時の結果の違いについて。通常のsqlを使用した場合 sql $sql =<<<SQL select * from users u inner join posts p on p.user_id = u.id where u.id=1 SQL; pr($this->User->query($sql)); 結果 Array ( [0] => Array ( [u] => Array ( [id] => 1 [user_name] </sql>…

cakephp1.2 バッチ(Shell)からControllerのメソッドを呼びたい

Shell側は以下のようになる Users = new UsersController(); } function main() { $this->Users->func(); } } 通常ShellからControllerのメソッドを呼ぶような事はしないんだけど、今回はpro…

cakephp1.2 queryで更新系SQLを実行した時の戻り値はtrueではない

例えば以下のような処理があったとして query($sql, $param); sqlが正常に完了してもqueryの戻り値は【trueにはならず】に【空のarray()】が返る。 はい、1時間はまりました~。貴重な人生の1時間を無駄にしました~。空のarrayなので【if(!$ret)】とかで判…

cakephp1.2 モデルのリレーションを全解除する

AppModel.php public function unbindModelAll($reset = true) { foreach(array('hasOne','hasMany','belongsTo','hasAndBelongsToMany') as $relation){ $this->unbindModel(array($relation => array_keys($this->$relation)), $reset); } } 参考サイト モ…

cakephp1.2 findByIdにrecursiveを設定する

User->findById($user_id, null, null, -1); findByIdだけでなくfindByカラム名>であれば全部同じなのかも。参考サイト ku — cakePHPのfindByにrecursiveを設定する方法

cakephp1.2 複数の同一モデルデータを一括でバリデートすることはできない(多分)

これまでな~んどもおんなじことやってその度に調べて半年もすれば忘れておんなじことをな~んども繰り返すのでめんどくさいけどメモする。 例えばこんなデータ Array ( [0] => Array ( [Model] => Array ( [col1] => hoge [col2] => fuga ) ) [1] => Array …

cakephp1.2 updateはできる限りsaveを使うこと

saveでupdateする場合でid以外を条件にしたい場合、通常updateAllを使うんだけど、updateAllを使うと ・自動でサニタイズしない ・自動でmodifiedを更新しない ・値を'で囲まないといけない 等々煩わしすぎる。そのためできる限りidを指定してsaveのupdateを…

cakephp1.2 フォームのデフォルト値について

もう忘れたくないのでメモ。 以下のようなテキストボックスがあるとする。 create('huga')); ?> text('hoge')); ?> このフォームをpostしてエラーになってもう一度表示した場合、自動で入力した値がセットされる。 次にDBから取得した値をデフォルト値とした…

cakephp1.2 findでrecursiveを指定する

recursiveの指定の仕方を完全に忘れていて調べるのに5分くらいかかってムカッときたので次回は3秒で書けるようにメモ。書き方1 array( 'Model.id' => $id, ), 'recursive' => -1, ); $this->Model->find( 'all', $cond ); 書き方2 $id, ); // 第2引数はfie…

cakephp1.2 キャッシュについてまとめ

core.php

cakephp1.2 validateである値に等しいかどうかはcomparisonを使う

array( 'comparison' => array( // 1の場合 'rule' => array('comparison', '==', 1), 'required' => true, ), ), );

cakephp1.2 validateのrequiredとnotEmptyと値が配列の場合についての再考

無駄に悩んでしまったので改めてまとめる。値がセットされているかだけチェックしたい array( 'notEmpty' => array( // このルール名はなんでもいいのでruleに合わせておけばOK 'rule' => 'notEmpty', // ruleは必須 'required' => true, 'message' => '選…

cakephp1.2 paginateを使用する時のまとめ

cakephpでページング使用と思って、久しぶりだったので何を使えばよいか忘れてしまっていてpearのpagerにしようかと思ったけどやっぱりcakephp標準のpaginateにしようかと思ってやってみたんだけど実装までに4時間もかかってしまって鬱になってイラッと来た…

cakephp1.2 paginateでunbindModelする時は第2引数にfalseを設定すること

paginate実行する前にunbindModelする場合、必ず第2引数にfalseを設定して永続的に連結を解除すること。 そうしないと最初のcountの時だけ解除されて、データ取得する時は元に戻ってしまうらしい。参考サイト CakePHPのbindModelとunbindModel | 株式会社LIG

php セッションの有効期限を2038年以上にするとセッションクッキーになってしまう件

cakephp1.2でSecurity.level=lowにした上でsession_startすると、本来であれば有効期限が25年先となるはずが、有効期限がセットされずにセッションクッキーになってしまうという問題にぶち当たった。しかもphp5.1だと発生し、php5.2だと発生しない。色々試し…

cakephp1.2 フォルダを分けて同名のコントローラーを作りたい場合

調べたけどできなそう。 なので、フォルダを分けていたとしてもコントローラー名は重複させないこと。ちなみに、URLのコントローラー名の部分は被ってもroutesで制御できるので問題ない。 'user_histories')); Router::connect('/admin/histories/:action/*…

cakephp1.2 セッションの有効期限についてまとめ

通常のphpの場合、php.iniの以下の設定が有効期限に影響する session.cookie_lifetime = 0 session.gc_maxlifetime = 1440cookie_lifetimeはクッキーの有効期限(秒)となる。これが86400とかだと、クッキーのexpiresが1日後となる。0の場合は、セッションクッ…

cakephp1.2 session->flash()を1ページで複数使い分けたい場合

php Session->setFlash('テスト', null, array('class'=>'mb10'), 'test1'); $this->redirect('/'); html flash('test1'); ?>

cakephp1.2 prefixを無効にした場合のform->createのカスタマイズについて

前回の続きで「'prefix名' => true」とかにすると$form->createで勝手にprefixがつくのを防ぐことができるけど、今度は逆につけたい場合に困ってしまう。 create( 'Samples', array( 'action' => 'index', 'method' => 'post' ))); 上記で出力されるhtml↓ <form id="SamplesIndexForm" action="/samples/index" method="post"> </form>…

cakephp1.2 ルーティングの設定でform->createの際に自動でprefixがセットされるのを防ぐ方法

"Routes::connect設定時の$form->createや$html->linkの挙動について" フォーラム - CakePHP Users in Japan ここが参考になるroutes.phpの設定で「'prefix名' => true」とすると、$form->createした際などに勝手にprefixがセットされるのを防ぐことができた…

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