はじめに
こんにちは。マイクロフレームワークっていいですよね。
何も考えずとも機能を一揃えしてくれるフルスタックフレームワークも良いですが、作りたいアプリケーションに必要な機能を見定めてライブラリを導入する、みたいな作業は男の子が好きなロボットのカスタマイズ感があり、くすぐられますね。
僕は普段CakePHPerなので、今回はSlimでもCakePHPのORMを使えるようにしてみます。
なお、僕がSlimのチュートリアルに使ったリポジトリはGithubに置いといたので、コミットログを見ながら追っていくとわかりやすいかもしれません。作りかけです。
Slimの導入
公式をはじめチュートリアルがたくさんあるので探してみてください。
マイグレーションの導入 - robmorgan/phinx
ORMの導入前に、マイグレーションツールを入れておきましょう。 別に必須というわけではありませんが、入れない理由もないですね。
CakePHPでも使われているrobmorgan/phinxを使用します。
phinxはCakePHPではbin/cake migrationsとして組み込まれていますが、もとは独立したライブラリなのでSlimへの導入も特別なことをする必要はありません。公式マニュアルなどを見れば使用法は書いてあるのでここでは手順をさっくりと流します。
composer require robmorgan/phinx
composerによるインストールコマンドです。
vendor/bin/phinx init
初期化処理です。設定ファイルphinx.ymlが生成されます。
paths:
migrations: '%%PHINX_CONFIG_DIR%%/db/migrations'
seeds: '%%PHINX_CONFIG_DIR%%/db/seeds'
...
development:
adapter: mysql
host: db
name: slim_todo
user: root
pass: root
port: 3306
charset: utf8mb4
phinx.ymlの主な設定項目です。pathsで設定したディレクトリはマイグレーション実行前に作成しておくとよいです。
これで使えるようになりました。
ORMの導入 - cakephp/orm
さて、本題です。CakePHPのORMをSlimに導入します。
composer require cakephp/orm
CakePHPのORMだけをcomposerでインストールすることができます。
cakephp/ormをインストールすると使えるようになるConnectionManagerでDBの設定ファイルを作成しました。
SlimのDIコンテナにTableLocatorのインスタンスを入れておきます。
DIコンテナの使い方は↓のあたりにも解説があります。
http://www.slimframework.com/docs/v3/tutorial/first-app.html#add-dependencies
あとは先ほどDIコンテナに詰めた$this->locatorからTableインスタンスを受け取り、いつものようにCakePHPのORMを使えます。できましたね。