bin
app/bin/*
がcomposerではいらないのでzipからおく
di
pimpleのプラグインを使ってみる
モデル
テーブルとエンティティがある。DDDか。
速度や効率というよりは、DDDの勉強になる感じがする。
テーブル
下記のようにコントローラーに紐づくテーブルモデルは読み込まれる。
$this->Sandbox
そうじゃない奴はuseとか使う。
$sandbox_table = TableRegistry::get('Sandbox');
use Cake\ORM\TableRegistry;
アソシエーション
recursiveはなくなり、containを使うようになった
エンティティ
useしておいてnewする。
use App\Model\Entity\Sandbox;
$sandbox_entity = new Sandbox();
テーブルオブジェクトから生成
$sandbox = $sandbox_table->newEntity($savedata);
マイグレーション
公式
http://book.cakephp.org/3.0/ja/migrations.html
phinxのマイグレーションらしい
http://docs.phinx.org/en/latest/migrations.html
バージョン2に比べてファイルベースになったので自動差分とかがなくなった
新規テーブル
bakeで作れるけど、マイグレーション名に気をつけないといけない。そうじゃないとうまく動かない。
(日本語ドキュメントに「従うことができます」とあるが誤訳かなあ。)
(/^(Create)(.)/) 指定したテーブルを作成します。
(/^(Drop)(.)/) 指定したテーブルを削除します。フィールドの指定は無視されます。
(/^(Add).(?:To)(.)/) 指定したテーブルにカラム追加します。
(/^(Remove).(?:From)(.)/) 指定のテーブルのカラムを削除します。
(/^(Alter)(.*)/) 指定したテーブルを変更します。 CreateTable と AddField の別名。
新規テーブルの流れ
$ bin/cake bake migration CreateHogeTable label:string name:string created modified
$ bin/cake bake migration CreateHogeTable2 label:string name:string created modified
$ bin/cake migrations migrate
$ bin/cake bake model CreateHogeTable1
$ bin/cake bake model CreateHogeTable2
また、この際に、up(),down()にならずにcreate()になるので注意。
Addでも同様だった。手動で記述かな。
たぶん、この辺りはマイグレーションプラグインのバージョンにも注意。
snapshot(リバースエンジニアリング)
cakephp2より弱くなっているが、initでリバースできるっぽい
テーブル指定できたら便利なのになあ
スナップショットから切り出してマイグレーションを作るようにするつもり
でも、面倒だしスナップショットのままでもいいかもしれない
スナップショットではchangeではなくup,downのメソッドで生成される
どういう思想でそうなってるんだろうな
# 全部のテーブルで生成
bin/cake bake migration_snapshot Initial
# Teble Class 定義済みに限定(本来的なスナップショットに使えそう)
bin/cake bake migration_snapshot Initial --require-table
マイグレーションを消す
ロールバックは全部履歴を辿って戻してしまう。
手動で対応するなどしてからマイグレーションファイルとDBの該当行を削除するなどで対応できる。
jsonbの対応
migrationはできた
jsonにもjsonbにも書き込みとかもできた
{"key1":"value1","key2":"value2"}
検索とかはうまくできるかしら。
多分大丈夫だよね。
Bakery
あれ、関係ないけどこのサイトってSphinxで作られてるのね。
ツリー
オプション無しで以下の手順で作るとアソシエーションが邪魔で上手く動かないので調整が必要。
migration create
bake model
modelにtreeを追加していても、モデルとしての動作は行えた
ビュー例
ヘルパー
- http://bakery.cakephp.org/2012/03/15/TreeLiHelper.html
- https://github.com/imsamurai/CakePHP-TreeHelper
シーダー
DB初期データをいれたりするphinxの機能を呼び出せる
追加と更新はあるけど削除はメソッドがないっぽい
強引にTableRegistryでテーブルオブジェクトを呼び出したりもできたけど、、
ちゃんと理解してシードとシェルとマイグレーションを綺麗に使うわけしたほうがいいのかもしれない。
シードのソースの指定はスラッシュを含む階層の指定でも大丈夫だった。Seeds/TestSeedsとか。
# bake
bin/cake bake seed MySeed --table MySeed
# 実行
bin/cake migrations seed --seed MySeed
# 実行 別ディレクトリ
bin/cake migrations seed --seed TestMySeed --source "Seeds/TestSeeds"
アカウント管理
ひとまずライブラリ2つを使う
下記エラーは、DBにコマンドでApp/isAuthorizedのACOを足せば大丈夫になった
Aco: App/App/isAuthorized [ROOT\vendor\cakephp\acl\src\Model\Table\PermissionsTable.php, line 91]
bin/cake acl.acl create aco controllers App
bin/cake acl.acl create aco App isAuthorized
用語・概念
-
ACL
- Access Control List
-
ACO
- Access Control Object
-
ARO
- Access Request Object
CakePHP3のACLでアクセス管理 - Qiita
http://goo.gl/cTCCG8
mattmemmesheimer/cakephp-3-acl-example
https://goo.gl/M8CRkA
チェック
Debugger::log($this->isAuthorized($this->Auth->user()));
bakeパターン
とりあえず全部作成パターン
# マイグレーション作成(テーブル名には注意)
bin/cake bake migration CreateWidgets name:string[100] part_no:string[11] quantity:integer[11]
# 確認
bin/cake migrations status
# 生成
bin/cake migrations migrate
bin/cake bake all widgets
# 権限データ更新(コントローラー追加時など)
bin/cake acl_extras aco_update
ACL
# 新規権限データ
bin/cake acl_extras aco_sync
# 権限データ更新(コントローラー追加時など)
bin/cake acl_extras aco_update
# 権限確認
bin/cake acl.acl view aco
# 権限追加
bin/cake acl create aco App isAuthorized
# 権限削除
bin/cake acl delete aco 999
# CRADプラグインの際の権限追加メモ(Appにpublicメソッドを追加)
bin/cake acl create aco App invokeAction
bin/cake acl create aco App isAction
Cell
ビューに特化した簡易なコントローラー
ランダム表示などちょっとした制御に利用するらしい
AOP
cakeevent
event dispatcher
とかでアスペクト思考もできる気がするらしい
他言語対応
エラーメッセージを日本語にする意味でも。
Internationalization & Localization
http://goo.gl/jdA10K
CakePHP3を触ってみました 〜ちょっとだけグローバル気分〜 | 日記の間 | あかつきのお宿
http://goo.gl/ujA65w
# /binまでのパス/cake i18n