CakePHP(開発編)

CakePHP(以下cake)によるアプリケーション開発手順の情報をまとめておきます。
cakeのバージョンは3.0.10です。
なお、今回は手元のWindowsPCを使用しました。

Composer
PHPでよく使われるパッケージ管理ツールです。
従来はPEARがよく使われていたようですが、こちらが主流になっているようです。
Rubyのbundlerのように、パッケージ管理ツールを使うとプロジェクトで使われているライブラリの依存関係を管理しやすくなり、依存しているライブラリのインストールも簡単になります。

今回はWindows環境なので、下記のページにあるインストーラを使用しました。
なお、インストール中に出てくるオプションの「Install Shell Menu」は、コンテキストメニューから起動できるので有効にしておくと便利です。
https://getcomposer.org/
「Composer」https://getcomposer.org/
https://getcomposer.org/Composer-Setup.exe

インストール時にOpenSSLに関するエラーが出ましたが、PHP側で無効になっていたためでした。
php.ini

;extension=php_openssl.dll


extension=php_openssl.dll


新規APPの作成
アプリケーションを作るディレクトリ[D:\work\PHP\CakePHP など]でコンテキストメニューから「Use Composer here」を起動します。
下記コマンドを実行すると(bookmarkerはアプリケーション名です)、
[D:\work\PHP\CakePHP\bookmarker\]
にアプリケーションのスケルトンが作られます。

composer create-project --prefer-dist cakephp/app bookmarker


※「cakephp/app」はディレクトリ名ではなく、composerが使うパッケージ名であることに注意!

チュートリアル
今回は「CakePHP Cookbook」というサイトを使用しました。
http://book.cakephp.org/3.0/ja/contents.html

http://book.cakephp.org/3.0/ja/contents.html

先ほど作成したアプリケーション(のスケルトン)をApacheが許可するように設定します。
C:\Program Files\Apache24\conf\httpd.conf

...
    Alias /bookmarker/ "D:/work/PHP/CakePHP/bookmarker/"
    <Directory "D:/work/PHP/CakePHP/bookmarker">
        Allow from all
    </Directory>
...

このアプリケーション用にデータベースを作成します。
今回はMySQLに「bookmarker」という名前で作成しました。

このアプリケーション用にデータベース接続設定をします。
D:\work\PHP\CakePHP\bookmarker\config\app.php

...
    'Datasources' => [
        'default' => [
...
            'username' => 'cake_user',
            'password' => 'cake_pass',
            'database' => 'bookmarker',
...

下記に接続し、全チェックがオッケーになっていれば、正常に動作しています。
http://localhost/bookmarker/index.php

bookmarkerアプリケーション用にテーブルも作成しておきます。
(MySQLのコンソールからファイルで実行するには、「mysql> source filename.sql」)


CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created DATETIME,
    modified DATETIME
);

CREATE TABLE bookmarks (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(50),
    description TEXT,
    url TEXT,
    created DATETIME,
    modified DATETIME,
    FOREIGN KEY user_key (user_id) REFERENCES users(id)
);

CREATE TABLE tags (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    created DATETIME,
    modified DATETIME,
    UNIQUE KEY (title)
);

CREATE TABLE bookmarks_tags (
    bookmark_id INT NOT NULL,
    tag_id INT NOT NULL,
    PRIMARY KEY (bookmark_id, tag_id),
    FOREIGN KEY tag_key(tag_id) REFERENCES tags(id),
    FOREIGN KEY bookmark_key(bookmark_id) REFERENCES bookmarks(id)
);

データベースが使えるようになれば、「bake」というコマンドを使ってアプリケーションの骨格を作ることができます。
bookmarkerアプリケーションで使用する、それぞれのモデルに対してこのコマンドを使用します。

D:\work\PHP\CakePHP\bookmarker>bin\cake bake all users
... 
D:\work\PHP\CakePHP\bookmarker>bin\cake bake all bookmarks 
...
D:\work\PHP\CakePHP\bookmarker>bin\cake bake all tags
...

ブラウザで下記にアクセスすると、bookmarkエンティティに対するCRUD操作が既に可能な事が分かります。
http://localhost/bookmarker/bookmarks