みなさんこんにちは!
ついにCakePHP3のdev preview 1が出ましたね! CakePHP 3.0.0 dev preview 1 released
テンション上がったので少しですが試してみようと思います。 CakePHP自体の開発スピードが最近上がってきたと感じるのでわくわくしてます。 それでは一緒にいじっていきましょう!
CakePHP3をインストールする
CakePHP3からComposerが必須になったのでComposerからインストールします。
$ curl -sS https://getcomposer.org/installer | php $ php composer.phar create-project -s dev cakephp/app .
これでインストール完了です!簡単!ひゃっほーい!
CakePHP2からはdatabase.phpがなくなり、app.phpに統合されたのでapp.phpからデータベースの設定を行いましょう。 これでとりあえずインストール完了です。 おそらくCakePHP3の安定版ではデータベース設定もbake出来るとは思うのですが今のところbakeが動かないようなので手動で設定しました。
これでいつもの緑画面が出てきたと思います。(DebugKitは気分的に入れてみました。オールグリーン、気持ちいいので)
データベースには以下のテーブルとデータを挿入しました。
CREATE TABLE IF NOT EXISTS `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `content` text NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, PRIMARY KEY (`id`) ) ; INSERT INTO `posts` (`id`, `title`, `content`, `created`, `modified`) VALUES (1, 'test1', 'test1の内容です', NOW(), NOW()), (2, 'test2', 'test2の内容です', NOW(), NOW()), (3, 'test3', 'test3の内容です', NOW(), NOW());
次で実際に触ってみます。
コードを書いてみる
今回やることはさきほど入れたデータを表示したりCakePHP3から実装されたEntityやRepositoryを使って遅延評価を行ったりしてみたいなぁと思います。
それでは早速書いていきましょう。
まずはPostsController.phpから書いていきます。
PostsController.php
set('posts', TableRegistry::get('Posts')->find('all')); } }
namespaceとかuse使ってる部分がモダンw 見ればわかるとは思いますが、Postsテーブルのインスタンスを作り、全件取得しています。 それをViewにpostsという変数名でオブジェクトを流し込んでいます。 namespaceにはそのファイルの場所名を書きます。今回のControllerであればApp/Controller以下にあるので上記のようになっています。
それではModelを書いていきましょう。 僕もまだEntityやRepositoryは厳密にどのようなものか理解出来ていないのですが、Entityにはモデルのロジックを、Repositoryにはデータベースのリレーションやバリデーションを書いていくようです。(あんまわかってない。誰か教えて!)
まずRepositoryのほうから作ります。
App/Model/Repository/PostsTable.php
今回はリレーションやバリデーションはかけないので何も書きません。 次にEntity
App/Model/Entity/Post.php
Entityのほうには後から関数を定義してみようと思います。
そして最後にView これでとりあえず動くはずです。
App/View/Posts/index.ctp
id;?>
これで以下の画像のように数字が出てくるはずです。
foreachで$postsをイテレートしてidを表示してみました。もちろんidの部分をtitleやcontentに変えればそれを表示することが出来ます。
Viewに渡されたオブジェクトからEntityモデルを叩く
今回はViewに$postsという変数名でオブジェクトを渡しましたが、ここからPostEntityを叩くことが出来ます。
App/Model/Entity/Post.phpにメソッドを追加します。
App/Model/Entity/Post.php
public function getFullContent(){ return $this->_properties['title'] . ":" . $this->_properties['content']; }
そしてViewも変えます。
App/View/Posts/index.ctp
full_content . "
";?>
これで以下のような表示が出来ます。
Entityのほうでgetから始めた関数はViewのオブジェクト側でgetを除いたアンダースコア記法で呼び出せるのです! これ超ベンリ!感動しちゃいました。Railsの感覚に近い。。
最後に
僕も対してわかっていないのでとりあえず動かしてみてこういうことが出来る、こういうことが出来なくなった、というのを1つずつ確認している段階です。 また開発バージョンなのでこれから変更がかかる可能性があります。 開発が終わるのがいつになるかわかりませんが、少しずつでも追っかけていると移行が早く出来て便利かもしれませんね!
CakePHPをこれから始めたい人は持っておくといいかも
秀和システム
売り上げランキング: 65,741
参考文献
CakePHP3公式APIドキュメント CakePHP3公式BOOK – Table objects CakePHP3公式BOOK – Entities 第3回 週末ランサーズにてCakePHP3についての講演をしました