[[CakePHPの設置]]

#contents

*雑感 [#ce83d434]

使いこなせてはいませんが、ざっと見た感想です。

**メリット [#d91e8798]

-利用者が多いので情報がある
-命名規則に従うことで開発工数を減らすことができる
-豊富なバリデーション機能がある
-migration機能を使うことでDB変更履歴をバージョン管理に含むことができる

**デメリット [#bf3a1b73]

-VIEWはテンプレート機能として分離されているが、phpのコードを直接書くのでコーダーには抵抗がありそう

*必要条件 [#a6495ea9]

CakePHP 3.6 の場合

PHP 5.6.0以上~
MySQL 5.5.3以上~
MariaDB 5.5以上

*必要なもののインストール [#sfd8ce06]

**ICUのインストール [#sb22f5dd]

ICUが無ければ入れておきます。

 # yum install icu libicu-devel

**intlの有効化 [#w5ef57ba]

PHPは intl が有効になっている必要があります。~
有効で無ければ --enable-intl オプションを指定してインストールし直します。

**PHPのバージョンアップ [#m08a3747]

PHPをソースからではなく、パッケージで管理している場合は、以下の手順で5.6以上に更新できます。

 # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
 # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
 # yum install --enablerepo=remi --enablerepo=remi-php56 php php-cli php-common php-gd php-mbstring php-mysql php-pdo php-pgsql php-xml php-intl

**MySQLを使用するための準備 [#i3c93535]

データベースにMySQLを使用する場合は --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd オプションを指定してインストールし直します。

php.ini にsockの位置を指定。

 # vi /usr/local/lib/php.ini
 pdo_mysql.default_socket=/var/lib/mysql/mysql.sock

**PostgreSQLを使用するための準備 [#n5283cd0]

データベースにPostgreSQLを使用する場合は --with-pdo-pgsql オプションを指定してインストールし直します。

*Composerのインストール [#v40e4e89]

CakePHP3系はComposerを利用するため、先にインストールします。

 $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
 $ php -r "if (hash_file('SHA384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
 $ php composer-setup.php
 $ php -r "unlink('composer-setup.php');"
 # mv composer.phar /usr/local/bin/composer.phar

*CakePHPのインストール [#dc1cdab1]

my_app_nameというフォルダにアプリケーションを作成する場合。

 # exit
 $ cd /home
 $ php /usr/local/bin/composer.phar create-project --prefer-dist cakephp/app my_app_name

バージョンを指定する場合
 $ php /usr/local/bin/composer.phar create-project --prefer-dist cakephp/app:3.6.* my_app_name

作成されたフォルダ内に生成される以下の2つのファイルは残しておくと Composer で引き続き管理ができます。

-composer.json
-composer.lock

開発環境から本番環境を構築する場合、2つのファイルをコピーし、以下のコマンドでOKです。
 $ composer install

*MySQLを使用するための設定 [#y767022c]

 $ vi config/app.php

テーブルやカラム名に予約語や特殊文字を使用している場合 true~
ただしパフォーマンスが低下します。

 # 'quoteIdentifiers' => false,
   'quoteIdentifiers' => true,

*PostgreSQLを使用するための設定 [#tf36d12f]

PostgreSQLを使用する場合は設定ファイルの default と test の2箇所を書き換えます。

 $ vi config/app.php

 # 'driver' => 'Cake\Database\Driver\Mysql',
   'driver' => 'Cake\Database\Driver\Postgres',

*timezoneの設定 [#kacd8623]

config/app.php は変更しなくてOK?

 'Datasources' => [
     'default' => [
         'timezone' => 'UTC',

config/bootstrap.php を変更します。

 date_default_timezone_set('Asia/Tokyo');

*データベースの作成 [#a2333756]

SQL文で作成することはもちろんですが、Migrationsの機能を利用することでDB変更履歴をバージョン管理に含めることができるようです。

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

先にテーブルを作成してからmigrationファイルを生成する場合は以下で可能です。

 $ bin/cake bake migration_snapshot Initial

後からmigrationで管理しときゃよかったなー。なんて思う場合は以下のコマンドで適用したことにしちゃうことができます。~
20170302002523のマイグレーションを適用したことにしちゃう場合。~
引数無しで全部適用しちゃったことになります。

 $ bin/cake migrations mark_migrated -t 20170302002523

テーブルprefsのファイルを作成する場合、

 $ bin/cake bake migration CreatePrefs name:string created modified

これで config/Migrations 以下にファイル名に日付などが付いたファイルが生成されます。~
この時点ではデータベースにはテーブルは生成されていません。

idは自動的に付加されます。~
createdとmodifiedはこの名前で生成すると自動的にdatetime型が設定され、それぞれの日時がCakePHPによって更新されるようになるので便利です。

実際に反映させるには以下を実行します。

 $ bin/cake migrations migrate

ステータスは以下で確認できます。

 $ bin/cake migrations status

戻す場合は以下で一つずつ戻ります。

 $ bin/cake migrations rollback

現在のデータベースとの差分を出力する場合は、以下を実行します。

 $ bin/cake bake migration_diff NameOfTheMigrations

up() と down() は同じファイルに書けます。~
というか書きましょう。

change() はそれだけしか書けないみたいです。~
rollbackしたら勝手にchange内容を戻してくれるみたいなので、戻せる内容を書きます。

マニュアル読みましょう~
https://book.cakephp.org/3.0/ja/migrations.html

**初期データの生成 [#f884ab26]

以下を実行することで基本となるファイルを生成できます。

 $ bin/cake bake seed Prefs

config/Seeds/PrefsSeed.php ファイルが生成されるので、この中を編集します。

 #$data = [];
  $data = [
      ['id' => 1, 'name' => '北海道'],
      ['id' => 2, 'name' => '青森県'],
 ];

反映するには以下を実行します。

 $ bin/cake migrations seed

ファイルを指定する場合は以下を実行します。

 $ bin/cake migrations seed --seed PrefsSeed

seedは履歴管理に含まれないので、実行するたびにデータ投入されるため注意が必要です。

*bakeでプログラムの基本を自動生成 [#fafcf6d1]

データベースを事前に作成しておくとbakeコマンドで基本的なプログラムを自動的に生成することができます。

なので、データベースの設計をきちんとして作成しておくと後々楽ができそうです。

各テーブルに対して実行することができます。~
prefsテーブルに対してすべてのプログラムを生成する場合は、

 $ bin/cake bake all prefs

src と tests 以下の Controller, Model, Template にそれぞれ生成されます。

使用できる引数のヘルプは以下で確認できます。

 $ bin/cake bake

*入門 [#wda4aab9]

以下の順番で読み進めると理解が深まりそうです。~
特に[[命名規則:http://book.cakephp.org/3.0/ja/intro/conventions.html]]は理解しておくといろいろお得がありそうです。

-[[ブログチュートリアル:http://book.cakephp.org/3.0/ja/tutorials-and-examples/blog/blog.html]]
-[[ブックマークチュートリアル:http://book.cakephp.org/3.0/ja/tutorials-and-examples/bookmarks/intro.html]]
-[[初心者のためのCakePHP3 プログラミング入門:http://libro.tuyano.com/index2?id=4536003]]

*CakePHPを最新に保つ [#n52019fb]

composer.json 内に記述されている制限の範囲内で更新されます。

 "require": {
     "cakephp/cakephp": "~3.2"
 }

 $ cd /home/my_app_name
 $ php /usr/local/bin/composer.phar update

**updateできない [#aa154b36]

 $ php /usr/local/bin/composer.phar update
 Loading composer repositories with package information
 Updating dependencies (including require-dev)
 Failed to decode response: zlib_decode(): data error
 Retrying with degraded mode, check https://getcomposer.org/doc/articles/troubleshooting.md#degraded-mode for more info

composer.json に repositories を追加するとできました。

     "repositories": [
         {
             "type": "composer",
             "url": "https://packagist.org"
         },
         { "packagist": false }
     ],



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS