この記事は下記の1日目としての投稿。
CakePHP3 Advent Calendar 2016 - Qiita
昨今は様々なphpフレームワークがある。Laravelとかは最近流行ったりしていて色々触ってみるが、
自分はやっぱりCakePHP3に帰ってきてしまう。それだけ便利で楽だからだ。
他のフレームワークには慣れているけど、CakePHPはなんか古臭くて触ってない、という人も是非一度使って見てほしい。
離れられなくなるはず。
CakePHP2以前しか使ったことがない人も一度触ってみてほしい。
では何が一体そんなにいいのか、色々と述べてみる。
設定しない。するとしてもprefixルーティングくらい。
コントローラとテンプレートがあれば設定しなくてもアクセスできる。
もちろん、他に変えたければできる。
<?php
Router::connect(
'/articles/:id',
['controller' => 'Articles', 'action' => 'view'],
['id' => '\d+', 'pass' => ['id']]
);
しかもテンプレート上で普通にヘルパーでリンクを作ると、勝手に設定したURLに置き換えてくれる。
変更後等もわざわざテンプレート側の調整等するのは古い時代のフレームワーク群の話。
<?= $this->Html->link(
'閲覧する',
['controller' => 'Articles', 'action' => 'view', $acticle->id]
) ?>
出力: <a href="/acticles/5">閲覧する</a>
こんな便利なデバッグバーは他にはない。デザインも秀逸で見やすく扱いやすい。
一番下にバーがあり、各タブをクリックすると全画面でデータが表示される。これが一番ベストだと気づいた。
CakePHP2のデバッグキットや他のフレームワークのもの等は、
下などに中途半端なサイズでドッキングしていてなんとかウィンドウにカーソルを合わせてサイズ調整したり、
両方狭い状態で操作したりするのはストレスになるだけで完全に時間の無駄だった。
テンプレートにsetされた変数はここで見られる。非常に見やすい。
SQL。
時間やメモリ使用の流れも見られる。
その他定数定義やrequestオブジェクトの中身、セッション等も見られる。
一度慣れたら他のフレームワークで開発する気にはなれない。
<?php
// シンプルな例。別にすごくはない。
$articles = $this->Articles->find()
foreach ($articles as $article) {
$article->title;
}
// 実は$articlesはQuery。配列じゃない。なので使いまわせる。
$allCount = $articles->count();
$articles->where(['category_id' => $categoryId]);
$countInCategory = $articles->count();
// ResultSetに変換
$this->set("articles{$categoryId}", $articles->all());
// 配列に変換
$this->set("array{$categoryId}", $articles->toArray());
echoするとクエリになるのでそのままサブクエリで使える。
<?php
$sub = $this->Articles->Comments->find()
->where([〜〜〜〜]);
$articles = $this->Articles->find()
->where(["($sub) > 5"]);
それぞれのデータはEntityなので例えば下記のようなメソッドを追加すると
<?php
protected function _getDisplayName()
{
if ($this->private) {
return '非公開';
} elseif ($this->company) {
return $this->company;
} elseif ($this->name) {
return $this->name;
}
return '未登録';
}
テンプレートは下記だけでいい。今の時代フレームワークを使ってるのに同じif文を複数のテンプレートに大量に書くなんてことはまさかしないだろう。
<?= $article->user->display_name ?>
昔はコントローラもモデルも自分で一から書いてもさほど変わらない、というところがあったが、
今は設定なども増えて便利になっているので、bakeするのがかなり効率的。というかコントローラとモデルはすべてbakeで作るべき。
テストの雛形も作ってくれるし、そもそも記憶を頼りに適当に作ると変な設定を書いてエラーになってしまったりする。
TableとEntityが作られる。
Tableでは基本的な設定、コンポーネントのロード、DBを元にしたカラムやリレーションの設定、
バリデーション、データチェックの設定などが自動で作成される。
NULLでないカラムは必須項目に設定されたり等する。
Entityは特にたいした設定は行われないが、
passwordカラムがあったりするとjson_encodeした際に含まれないような設定を追加してくれていたりする。
特に設定しなければCRUDアクションが勝手に作られる。
特に拘り不要の管理画面などであればbakeだけで作れるし、
そうでなくてもベースに使えるのでかなり楽。
こちらもbakeで作成したコントローラそのままで使ったりするのであればそのまま使える。
Bootstrapのプラグインもあるのでそちらを使うことも可能。
まあテンプレートは必要であれば使う、と言ったところか。
なんでもかんでもbakeで雛形を作ってくれる。
コマンドオプションも色々見てみると楽しい。
デフォルトでは特に何もする必要はない。普通にindexとかviewのアクションにAcceptヘッダーとしてapplication/jsonを送ればhtmlでなくjsonが返ってくる。
URLを変えたり状況によってjson用のresponseをreturnしたりするコードを書くのは昔の時代のフレームワークの話。もちろんそういったこともできる。
(実際にはそういった設定があるのだが、初期化時点でその設定のコードが入っている)
phpMyAdminで適当にテーブルを構築しておけば、コマンド一発でマイグレーションファイルを作ってくれる。すごく楽。
稼働中のプロジェクトにマイグレーションを途中から導入することも問題ない。
自分で書いて、抜けが見つかったらrollback&migrateでテスト中のデータとか一旦空になったりとか、面倒じゃないんだろうか?
初期化。
bin/cake bake migration_snapshot Initial
差分のマイグレーション作成
bin/cake bake migration_diff NameOfTheMigrations
マイグレーションファイルが増え過ぎたらマイグレーション関連データとファイルを削除してまたsnapshotすれば1ファイルにまとまる。
他にもアソシエーション関連機能は便利だし、優位性関係なく非常に便利な機能が揃っている。
やっぱり仕事を早く効率的に終わらせたいなら、phpフレームワークの中ではCakePHP3が一番いいのではないかと思う。(個人的意見)
追記)
そして2018年にこういうのを書きました
CakePHPとLaravelの比較2018
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント