by shigemk2

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

cakephp

CakePHP 2 to 3 find結果をキャッシュする

キャッシュに書き込むときはCache::writeをつかえばいいんだけど、 CakePHP ORM で作成したクエリーの結果をキャッシュする場合は、 ロードされた結果をキャッシュする セクションで説明しているように、Query オブジェクトのビルトインキャッシュ機能を使用…

CakePHP 2 to 3 ErrorHandlerの覚書

github.com 独自ErrorHandlerでcomposerからインストールできるやつはbootstrap.phpにErrorHandlerを追加でregisterすることで独自ErrorHandlerを利用できる。 試し切れていないけど、new registerは複数行書くことができるので、ErrorHandlerを多種類呼び出…

CakePHP2 to 3 Locale

ディレクトリが微妙に違うだけで、ISOコードがディレクトリ名なのも変わらなければファイル名がdefault.poなのも変わらない。 book.cakephp.org book.cakephp.org

CakePHP2 to 3 csrf token

book.cakephp.org book.cakephp.org $token = $this->Security->Session->read('_Token'); $token = $this->request->getParam('_csrfToken');

CakePHP3 2 to 3 ACL

ACL 関連クラスは、別のプラグインに移動されました。PasswordHassher, Authentication および Authorization プロバイダは \Cake\Auth 名前空間に移動されました。 あなたのプロバイダとハッシャーも同様に App\Auth 名前空間に移動する必要があります。 bo…

CakePHP 2 to 3 App::build

2.xのApp::buildは、各パッケージの場所を設定するためのもの。3.xではApp::buildはなくなった。composerのclasspathがかわりにうまいことやってくる(はず)だから。 この例だとControllerはまず/full/path/to/Controller/のほうを見に行って、なかったら/ano…

CakePHP3 Application.php

Application.phpのbootstrap()がやってること。 アプリケーションの低レベルな関心事を設定するために使用する config/bootstrap.php ファイルに加えて、 プラグインのロードや初期化、グローバルイベントリスナーの追加のために Application::bootstrap() …

CakePHP 2 to 3 Model::query

こんなピュアなSQL文を叩くことあるのかなって思うけど、DB接続してクエリ叩くだけならありうるかも。 2.x $this->Picture->query("SELECT * FROM pictures LIMIT 2;"); 3.x use Cake\Datasource\ConnectionManager; $connection = ConnectionManager::get('…

CakePHP 2 to 3 AuthComponent::$sessionKey

2.x AuthComponent::$sessionKey 3.x // ソースコードを読む限りは以下のいずれかでいけるっぽい。 $this->Auth->__get('sessionKey'); $this->Auth->storage()->getConfig('key'); book.cakephp.org

CakePHP 2 to 3 viewPath

viewPath - templatePath に置き換え book.cakephp.org

CakePHP 2 to 3 skipLog

skipLogは2.xでも3.xでも変更はない。でも書き方としては3.xは全部書かないといけなくなった。 book.cakephp.org

CakePHP 2 to 3 移行でまずやること

book.cakephp.org github.com 3.xのブランチに切り替えてツールを実行したところでnamespaceなどが追記されるだけでindex.phpとか根本的なところは何も変わらないので、プレーンなプロジェクトを作成して、もとのコードをすこしずつ移植していくしかない。移…

CakePHP 2 to 3 constructClasses

このメソッドはコントローラに必要とされるモデルをロードします。 モデルをロードするプロセスは通常 CakePHP によって行われますが、 このメソッドは別の視点からコントローラにアクセスする時に便利です。 コマンドラインスクリプトまたは何かしらの外部…

CakePHP 2 to 3 Form->create第一引数

2.x // モデル名のString echo $this->Form->create('Recipe'); 3.x // $articleはEntityクラス echo $this->Form->create($article); 2.xみたいに第一引数にstringを入れたらエラーが出る。3.xだと、第一引数はnullでもいい。 book.cakephp.org FormHelper -…

CakePHP 2 to 3 AppModel

2.xにあったモデル共通クラスのAppModelは3.xじゃ廃止されたっぽい。 ModelがTableとQueryに分離したからしょうがないかもね。 Tableを継承してAppTableみたいなことをしてくれってコメントがあった。 github.com

CakePHP 2 to 3 PhpReader

PhpReader→PhpConfig 特定の設定ファイルを読み込ませたいときにつかうPhpReaderは3じゃPhpConfigになる。new PhpConfigするのはPhpReaderからいっしょ。 book.cakephp.org

CakePHP 2 to 3 AuthComponent

loginActionとかloginRedirectとかはプロパティに直設定するのではなくsetConfigをつかう book.cakephp.org

CakePHP 2 to 3 ルートクラス

CakePHP 2.x アプリケーションから移行するときに、小文字とアンダースコアーによる URL が必要であるなら、 InflectedRoute クラスを代わりに使用できます。 デフォルトはDashedRouteで、ルーティングはハイフンがベースになる。 routes.phpをいじる。 Rout…

CakePHP 2 to 3 AppHelper

2.xにあったAppHelperは消えた。UrlHelperが一部機能を代替しているっぽい。 github.com

CakePHP3 set/get

3.4とか3.6あたりから、プロパティを直接参照しないで、関数名set/getで始まるものを使うように推奨され始めている気がする。 3.4の例。 Request::$data は非推奨です。代わりに Request::getData() を使用してください。 Request::$query は非推奨です。代…

componentのinitialize

内容 2.x 3.x initialize function initialize(Controller $controller) function initialize(array $config) book.cakephp.org

You cannot configure "%s", it already exists in the registry

cakephp/TableLocator.php at 3.x · cakephp/cakephp · GitHub 内容 2.x 3.x モデル呼び出し $uses TableRegistry::getTableLocator()->get TableRegistry::getTableLocator()->getのときにすでに定義されたインスタンスがないかどうかチェックしているっぽ…

cakephp 3.x 2021-05-03

Fix Text file busy errors when deleting directories. Unsetting iterator references helps releasing possible locks. src/Cache/Engine/FileEngine.php ファイルを消すときにtext file busyになることがあるらしい。

Inflector::slug

Inflector::slug 特殊文字(おそらくマルチバイト文字)をラテン文字に変換する。テストコードを見ると、ギリシア文字とか、日本語、ハングルも含まれていた。 https://book.cakephp.org/2/ja/core-utility-libraries/inflector.html https://book.cakephp.org…

独自のコンポーネントの定義

502 Bad Gateway1. app/controllers/components/に、以下のような感じで書く 2. app/app_controllers.phpに、以下のように記述する var $components = array('Hoge', 'Session'); なお、コントローラの beforeFilter() メソッド…

beforeFind afterSaveなどの使いかた

使い方もよく分からなかったので小さなメモです。 beforeで始まるやつや、afterで始まるやつは、基本的に モデルに備わっているメソッドで、 before系はそのメソッド(saveやfind)が実行される前に呼び出される関数で、 after系はそのメソッド(saveやfind)が…

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…