てきとうなさいと べぇたばん

CakePHP 3.0.0-alpha2を触ってみる

とりあえず出来た画面。URLは/entries/ Entryを追加するときの画面。

CakePHP 3.0.0-alpha2が出ている

CakePHPの次期バージョン、CakePHP 3.0.0-alpha2が先月末にリリースされている。とりあえず触ってみたい。

注意

CakePHP 3.0.0-alpha2はまだbetaですらないので実用できないです。

インストール

Debian GNU/Linux squeezeに、dotdebパッケージを入れてPHP 5.4.31を使用している。CakePHP3.0.0では、PHPのバージョンは5.4.19以上を必要とするので注意。

githubから取得

適宜、git-cloneしておく。この環境下では、~/cakephp/にgithubのクローンが取得されていて、git-pullで同期済みという環境。

$ cd cakephp # 元々あったCakePHPのgithubからのクローン
$ git checkout -b cake3 refs/tags/3.0.0-alpha2

Composerを使えるようにしとく

https://getcomposer.org/

$ cd ~
$ mkdir cake3
$ rsync -avz ~/cakephp/ . --cvs-exclude
$ pushd cake3
$ wget https://getcomposer.org/installer
$ php installer

エラーが出た

プロジェクトを作成しようとした。

$ php composer.phar create-project -s dev cakephp/app

以下のようなエラーが出た。

Problem 1
  - Installation request for cakephp/cakephp 3.0.*-dev -> satisfiable by cakephp/cakephp[3.0.x-dev].
  - cakephp/cakephp 3.0.x-dev requires ext-intl * -> the requested PHP extension intl is missing from your system.

php5-intlが足りないらしいのでインストール。

$ sudo aptitude install php5-intl

プロジェクトを作成

やり直し。成功したようだ。

$ php composer.phar create-project -s dev cakephp/app

テーブル定義

cake3testというデータベースを予めつくっておく。

mysql> CREATE DATABASE cake3test DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

sample_sql.sqlというテーブル作成用のSQLを用意。

$ cat > sample_sql.sql # catをちょっとしたエディタとして使っている。当然viなど一般的なエディタでいい
CREATE TABLE users (
  id integer not null auto_increment,
  name varchar(256) not null,
  created datetime,
  modified datetime
  , primary key(id)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
CREATE TABLE entries (
  id integer not null auto_increment,
  user_id integer not null,
  title varchar(1024),
  body text,
  created datetime,
  modified datetime,
  primary key(id)
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;

sample_sql.sqlをcake3testデータベースに流す。

$ mysql cake3test < sample_sql.sql

できたら、testもつくっておくといい。今までの慣習に習ってtest_cake3testデータベースを作成。

mysql> CREATE DATABASE test_cake3test DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

MySQLに接続

database.phpが無くなっていることに驚いた。app/config/app.php内に記述するらしい。

$ vi app/config/app.php

以下のあたりを修正する。

'Datasources' => [
    'default' => [
        'className' => 'Cake\\Database\\Connection',
        'driver' => 'Cake\\Database\\Driver\\Mysql',
        'persistent' => false,
        'host' => '*********',
        'login' => '**********',
        'password' => '*************',
        'database' => 'cake3test',
        'prefix' => false,
        'encoding' => 'utf8',
        'timezone' => 'SYSTEM',
        'cacheMetadata' => true,
    ],
    'test' => [
        'className' => 'Cake\\Database\\Connection',
        'driver' => 'Cake\\Database\\Driver\\Mysql',
        'persistent' => false,
        'host' => '**********',
        'login' => '***********',
        'password' => '***********',
        'database' => 'test_cake3test',
        'prefix' => false,
        'encoding' => 'utf8',
        'timezone' => 'SYSTEM',
        'cacheMetadata' => true,
        'quoteIdentifiers' => false,
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
    ],
],

bakeする

おなじみbake。これでwebアプリケーションでのCRUDができる。

$ app/src/Console/cake bake model Users
$ app/src/Console/cake bake model Entries
$ app/src/Console/cake bake controller Users
$ app/src/Console/cake bake controller Entries
$ app/src/Console/cake bake view Users
$ app/src/Console/cake bake view Entries

さんこう

かんそう

ModelのEntityとTableに分かれてるところは、データベーステーブルの操作と具体的なロジックを分けられるのでいいと思った。まだCakePHP 3.0.0の良さはわかっていないので、さらに調べていこう。

調べたいこと

  • ユニットテスト
  • Modelの構造
  • Viewの構造
  • Controllerの構造