LoginSignup
8
7

More than 5 years have passed since last update.

cake3を使ってみるはず1

Last updated at Posted at 2016-05-10

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を追加していても、モデルとしての動作は行えた

ビュー例

ヘルパー

シーダー

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
8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7