CakePHP3の1歩目 #2

CakePHPの仕様をもうちょっと確認

指針

バリデーションチェックがあるんなら簡単なフォームをとりあえず作ってみたい。
仕様を確認しつつやっていくので記事がかなり散らかっている。

簡易フォーム

名前, 年齢, メールアドレスをそれぞれ入力させ、入力情報をDBに保存し、
管理画面から登録情報の閲覧及び編集が可能なwebアプリケーションを目指してみる。

[root@localhost ~]# mysql -u root -p
mysql> use cake_test;
mysql> CREATE TABLE users (
    ->     id INT AUTO_INCREMENT PRIMARY KEY,
    ->     age INT(3) NOT NULL,
    ->     email VARCHAR(255) NOT NULL,
    ->     created DATETIME,
    ->     modified DATETIME
    -> );

テーブルの構成はこんな感じで。
CakePHPというのはコーディング規約がかなりガッチガチらしく、例えばテーブル名は複数形にするのが望ましいとか。
MVCまわりの規約が特に固まってるっぽいけどどうなんだろう

ビルドインサーバ

# bin/cake server

公式ドキュメントを読んでいると、以上のコマンドでビルトインサーバを起動するように求められた。
PHP本体にも導入されている機能で、コマンドラインから簡単に開発用ウェブサーバを立ち上げられるものらしい。

[root@localhost ~]# cd /var/www/html/Cake
[root@localhost Cake]# bin/cake server
-bash: /var/www/html/Cake/bin/cake: 許可がありません
[root@localhost Cake]# chmod 744 bin/cake
[root@localhost Cake]# bin/cake server
PHP Warning:  Module 'intl' already loaded in Unknown on line 0

Welcome to CakePHP v3.5.1 Console
---------------------------------------------------------------
App : src
Path: /var/www/html/Cake/src/
DocumentRoot: /var/www/html/Cake/webroot
---------------------------------------------------------------

権限がなかったっぽいんで744与えて実行したら立ち上がった。

しかし、XAMPPとかでやってるならまだしも、今回VMwareに突っ込んでるのでローカルにサーバ立ち上げても閲覧できません。
名残惜しいのですがこの機能の検証はまた今度やります。

CakePHPインストールフォルダの構造

前回あんまり中身見てなかったなぁと

  • src
  • webroot
    • ドキュメントルート
    • 画像, css, js等のフロントエンド要素を置くところ
  • config
    • 各種設定ファイル

タイムゾーン設定

前回してなかったので

[root@localhost ~]# vi /var/www/html/Cake/config/app.php
# Datasourcesの該当箇所
'timezone' => '+09:00',

[root@localhost ~]# vi /var/www/html/Cake/config/bootstrap.php
date_default_timezone_set('Asia/Tokyo');

まったく気にしてなかったけど、DatasourcesにはDefaultとTestがあって使い分けられるようになってる。
「テスト用とどうやって分けるんだろう」って思ってたのに上を行かれた

bake

CakePHPはDBの情報を元にMVCの雛形を自動で作成する機能があり、それがbakeにあたる。
つまりはケーキのパン生地を焼くコマンドです。

# modelだけ欲しかったら bake model, controllerだけ欲しかったら bake controller等。
# 引数なしで叩くと利用できるタスクの一覧が表示されます
# 今回はallでusersテーブルの情報を基にします
[root@localhost Cake]# bin/cake bake all users
PHP Warning:  Module 'intl' already loaded in Unknown on line 0
Bake All
---------------------------------------------------------------
One moment while associations are detected.

Baking table class for Users...

Creating file /var/www/html/Cake/src/Model/Table/UsersTable.php
Wrote `/var/www/html/Cake/src/Model/Table/UsersTable.php`
Deleted `/var/www/html/Cake/src/Model/Table/empty`

# いろいろ作られる

http://[ドメイン]/[アプリケーション]/[テーブル名] にアクセスするとページが作成されている。

非常に簡易的なDBアクセスの機能を有するwebアプリケーションというところでしょうか。
usersテーブルの情報を表示するもののようで、更に"New User"を開くとAgeとEmailの入力欄が表示される。
テーブル名を規約で複数形に縛ってるから自動的にこういうものが作られるのかな

CakePHPにおけるプロジェクトのURL

http://[ドメイン]/[アプリケーション]/[アクション]

VMware Toolsのインストール

Controllerをガリガリ書きたいがCakePHPのインストールフォルダが手元にないためやりづらい。
viでコーディングは死んでもやりたくない。

[root@localhost ~]# yum install -y perl net-tools

まずperlとnet-toolsのインストール

[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
mount: /dev/sr0 is write-protected, mounting read-only

# インストーラの名前を確認しておく
[root@localhost ~]# ls /mnt/cdrom
VMwareTools-10.0.5-3228253.tar.gz

# インストーラの展開
[root@localhost ~]# cd /tmp
[root@localhost tmp]# tar zxpf /mnt/cdrom/VMwareTools-10.0.5-3228253.tar.gz

# インストール
[root@localhost tmp]# cd ./vmware-tools-distrib
[root@localhost vmware-tools-distrib]# ./vmware-install.pl
# gccがない
What is the location of the gcc program on your machine?

# gccをインストールしてやり直すもカーネルヘッダが見つからない
[root@localhost vmware-tools-distrib]# yum install -y gcc
[root@localhost vmware-tools-distrib]# ./vmware-install.pl
Enter the path to the kernel header files for the 3.10.0-514.26.2.el7.x86_64 kernel?

# カーネルのバージョンを確認して対応するモジュールをインストール
[root@localhost vmware-tools-distrib]# uname -r
3.10.0-514.26.2.el7.x86_64
[root@localhost vmware-tools-distrib]# yum install -y kernel-devel-3.10.0-514.26.2.el7.x86_64

# 無事インストールが完了するので再起動
[root@localhost vmware-tools-distrib]# ./vmware-install.pl
[root@localhost vmware-tools-distrib]# reboot

VMware Toolsのインストールが完了する。

  • VMware Player側の操作
    • Player -> 管理 -> 仮想マシンの操作
    • オプションタブ -> 共有フォルダ
      • 共有フォルダにしたいホスト側のパスを指定
      • この共有を有効化にチェック
    • フォルダの共有 -> 常に有効にチェック
# 確認
[root@localhost ~]# ls -la /mnt/hgfs

しかし、共有フォルダに指定したはずのディレクトリが見つからない。

[root@localhost ~]# cd /tmp
[root@localhost tmp]# ./vmware-tools-distrib/bin/vmware-config-tools.pl
make[2]: *** [/tmp/modconfig-8GDl8C/vmhgfs-only/page.o] エラー 1
make[1]: *** [_module_/tmp/modconfig-8GDl8C/vmhgfs-only] エラー 2
make[1]: ディレクトリ `/usr/src/kernels/3.10.0-514.26.2.el7.x86_64' から出ます
make: *** [vmhgfs.ko] エラー 2
make: ディレクトリ `/tmp/modconfig-8GDl8C/vmhgfs-only' から出ます

上記の実行ファイルをもう一度実行してみると、どうやらmakeの部分でエラーが発生している。
めんどくさいので検索して見つかった奴を試す

# ソースコードの解凍
[root@localhost tmp]# tar xvf vmware-tools-distrib/lib/modules/source/vmhgfs.tar

# 1639行目を修正
# 開いたらreadonlyになるので権限を変更してから編集
[root@localhost tmp]# chmod 644 vmhgfs-only/page.c
[root@localhost tmp]# vi vmhgfs-only/page.c
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)

# 圧縮して移動
[root@localhost tmp]# tar -cvf vmhgfs.tar vmhgfs-only
[root@localhost tmp]# mv vmhgfs.tar vmware-tools-distrib/lib/modules/source/
mv: `vmware-tools-distrib/lib/modules/source/vmhgfs.tar' を上書きしますか? y

# 再度インストーラを実行
[root@localhost tmp]# ./vmware-tools-distrib/vmware-install.pl

# 正常に終了したっぽいので再起動
[root@localhost tmp]# reboot

# ありました
[root@localhost ~]# ls /mnt/hgfs
shared
[root@localhost ~]# cp -r /var/www/html/Cake /mnt/hgfs/shared

とんだ苦労だ
sublime textでsftp送信できるように設定。
(最初からXAMPPでやればよかったかなぁ)

思いのほか長くなってしまったので一旦ここで切ります。
次回は具体的にsrcディレクトリをいじっていきたいです。