(2019-06-10更新)
CakePHP3でWebアプリケーションを作るときに手順を忘れてしまうので自分用にメモ。
- プロジェクトを開始する
- 内蔵サーバーを起動
- データベース接続設定
- データベースにテーブルを作成する
- モデルを作成する
- コントローラを作成する
- テンプレートを作成する
- データーを表示する
- SQLiteの日付型について
- クエリービルダの条件で日付範囲を使用する
プロジェクトを開始する
以下の説明はcomposerを使った場合。
composer create-project --prefer-dist cakephp/app my_app_name
内蔵サーバーを起動
bin/cake server
http://localhost:8765/ にアクセスするとCakePHPの画面が表示される。
外部からアクセスさせたい場合には次のどちらかで起動する。
bin/cake server --host=0.0.0.0 bin/cake server -H 0.0.0.0
なお、内蔵サーバーを動作させたままソースファイルを編集すると自動的に最新のものを読み込んでくれる。
データベース接続設定
MySQL以外のデータベースに接続するには対応するドライバが必要。
config/app.php に記述をする。 以下の部分を書き換える。 'default' の他に 'test' もあるのでそちらも書き換える。
MySQL
<?php 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', /* * CakePHP will use the default DB port based on the driver selected * MySQL on MAMP uses port 8889, MAMP users will want to uncomment * the following line and set the port accordingly */ //'port' => 'non_standard_port_number', 'username' => 'my_app', 'password' => 'secret', 'database' => 'my_app',
PostgreSQL
PostgreSQLでローカルのデータベースを使用する場合は次のようになる。
<?php 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Postgres', 'persistent' => false, 'host' => 'localhost', 'username' => 'my_app', 'password' => 'secret', 'database' => 'my_app', 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, 'log' => false,
SQLite3
SQLite3でデータベースファイルとしてローカルの database/database.sqlite3 を使用する場合は次のようになる。
<?php 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Sqlite', 'persistent' => false, 'host' => 'localhost', 'username' => '', 'password' => '', 'database' => 'database/database.sqlite3',
データベースにテーブルを作成する
たとえば users というテーブルを作成する。 テーブル名は複数形にする。 テーブル名に区切りがある場合はアンダーバー(_)で接続する。
以下ではモデル、コントローラ、テンプレートをバラバラに作成しているが、次のコマンドで一括で作成できる。
bin/cake bake all Articles
モデルを作成する
bin/cake bake model Articles
以下のファイルが作成される。
コントローラを作成する
bin/cake bake controller Articles
以下のファイルが作成される。
- src/Controller/ArticlesController.php
- tests以下のいくつかのファイル
テンプレートを作成する
bin/cake bake template Articles
以下のファイルが作成される。
- src/Template/Articles/index.php
- src/Template/Articles/view.php
- src/Template/Articles/add.php
- src/Template/Articles/edit.php
データーを表示する
もし内蔵サーバーが起動していなければ先ほどと同様のコマンドで内蔵サーバーを起動する。
bin/cake server
http://localhost:8765/Articles/ にアクセスすると動作するアプリケーションの画面が表示される。 左ペインの「New Articles」をクリックするとデーター登録画面になるのでここから入力することができる。
SQLiteの日付型について
CakePHPはbakeで作成したモデルのコード、作成後のモデル動作などがデータベース・フィールドの型によって変わる。
SQLiteには日付型が存在しない(文字列として格納される)が、型名を日付型にしておくことでCakePHPのフォームヘルパーでの入力方法などが変わってくる。
- DATE型 … 日付のみを格納する
- DATETIME型 … 日付と時刻を格納する
クエリービルダの条件で日付範囲を使用する
次のようなコードにする。
<?php $query = $this->MyTable->find() ->where([ 'date_field BETWEEN :start AND :end' ]) ->bind(':start', new \DateTime('2019-01-01'), 'date') ->bind(':end', new \DateTime('2019-12-31'), 'date');