まずDBにテーブルを作成する。 ※例えば
users
テーブルを作成する。んで次のコマンドを実行。
1 2 3 |
php bin/cake.php bake controller Users php bin/cake.php bake model Users php bin/cake.php bake template Users |
これでCRUD機能の完成。
まずDBにテーブルを作成する。
※例えばusers
テーブルを作成する。
んで次のコマンドを実行。
1 2 3 |
php bin/cake.php bake controller Users php bin/cake.php bake model Users php bin/cake.php bake template Users |
これでCRUD機能の完成。
1 |
php composer.phar create-project --prefer-dist -s dev cakephp/app MyProjectName |
上記を実行すると、本体のインストール、tmpフォルダの権限設定、DebugKitのインストールまでもが完了した状態となる。
あとはMigrationsプラグインでもいれればとりあえず自分的に完了。
ほぼほぼCake2系の時の手順と変わらない。
今回も同じくusers
テーブルにusername
カラムとpassword
カラムを用意しておくと勝手にそこを見に行ってくれるようになっている。
コンポーネントを読み込む際に下記のように設定を記述する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// src/Controller/AppController.php ... public function initialize() { $this->loadComponent('Auth', [ 'loginRedirect' => [ 'controller' => 'Defaults', 'action' => 'index' ], 'logoutRedirect' => [ 'controller' => 'Users', 'action' => 'login' ] ]); } ... |
な感じ。
loginメソッドは下記のような感じで実装してやれば良い。
1 2 3 4 5 6 7 8 9 10 |
public function login() { if ($this->request->is('post')) { $user = $this->Auth->identify(); if ($user) { $this->Auth->setUser($user); return $this->redirect($this->Auth->redirectUrl()); } // ここに来たらログイン失敗。 } } |
あとは公式にまかせた。
http://book.cakephp.org/3.0/en/tutorials-and-examples/blog-auth-example/auth.html
bakeも問題無く動作するしいよいよCake3も熱くなってきたね。モデル周り以外は2系とそんなに使い方に差異はないかも。session周りが若干変わったくらい?
1 2 3 |
"require": { "cakephp/migrations": "dev-master" } |
1 |
php composer.phar update |
まぁ読み込めればどこでもいいんだけどbootstrap.php
あたりで読み込むのがベターかと。
1 |
Plugin::load('Migrations'); |
cliからbin/cake migrations
で呼び出せる。
1 |
bin/cake migrations create Initial |
これをすると一番はじめのマイグレーションファイルが生成されて、DBにも履歴管理用のテーブルが生成される。
この生成されたファイルのup()メソッドにアップグレード用のSQLを記述。
down()メソッドにダウングレード用のメソッドを記述する。
※Symfony2のようなDBの差分自動算出機能はない模様。(これはマジで不便)
なので下記のように自分で書いてやる。
※SQLは適当なので注意。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/** * Migrate Up. */ public function up() { $query = " DROP TABLE IF EXISTS users; CREATE TABLE IF NOT EXISTS users ( id int(10) unsigned NOT NULL, created datetime NOT NULL, modified datetime NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; "; $this->execute($query); } |
down()メソッドに差し戻し用のSQLも書いてやったら、migrate
を実行。
1 |
bin/cake migrations migrate |
差し戻したければrollback
1 |
bin/cake migrations rollback |
とりあえずこれだけ知ってれば使えるはず。
あとは公式を参照されたし。
例えばSQLが複数回発行される場面で、それらが全て成功したか、全て失敗したかのどちらかを保証してくれるシステム。
トランザクションを実行するためにはテーブルの種類がトランザクションをサポートしている必要があるので注意。
まずはモデル内でデータソースオブジェクトを取得する。
1 |
$dataSource = $this->getDataSource(); |
後はこんな感じで使う。
1 2 3 4 5 6 7 8 9 10 11 |
// トランザクションスタート $dataSource->begin(); // 複数のクエリを実行 if (/*すべて成功した場合*/) { $dataSource->commit(); } else { // 一つでもこけていたらロールバックを行う $dataSource->rollback(); } |
トランザクションをネスト化さたりも出来るみたいなので詳しくは公式を参照されたし。
はfieldsも下記のように指定すること。
※でないと取得した結果が意図したとおりに取れない。
$this->Post->find('all', [ 'joins' => [ 'Comment' => [ 'table' => 'comments', 'alias' => 'Comment', 'type' => 'left', 'conditions' => [ 'Post.id = Comment.post_id' ] ] ], 'fields' => '*' ])
てな感じ。
コントローラーから有効期限を指定しなおして発行したい場合、
「$this->Cookie->time」を直接書き換えても反映されないので注意が必要。
有効期限を動的に書き換えたい場合は、write()メソッドの第4引数に期限を渡せばOK。
$this->Cookie->write('data', $data, true, 0);
と言った感じ。
CakePHP2.4以降からjsonp出力がサポートされたのでやってみる。
// コントローラー内のメソッド public function index { // 出力したいデータ $result = ['hoge', 'piyo', 'fuga']; $this->viewClass = 'Json'; $this->set([ 'result' => $result, '_serialize' => ['result'], // 下記変数をセットすると出力がjsonpになる。 '_jsonp' => true ]); }
呼び出しの際は、上記メソッドにアクセスし、クエリストリングで「?callback=functionName」を渡す。
※functionNameは任意の関数名。
これでレスポンスヘッダの「Content-Type」も「application/Javascript:」になってくれる。