さくらの VPS を使う - 7. CakePHP

この記事は KainokiKaede Advent Calendar 2014 10日目の記事です(大嘘)

CakePHP を学べば富も名声も恣だと聞いたので学習しようと思ったのですが、まずは環境が必要なのでさくらの VPSCakePHP が動く環境を整えました。

ちなみにこの記事は書きためで、記事作成 2013-02-12, 最終更新 2013-12-10 なのでやりかたが変わっている恐れがあります。あしからず。

参考サイト

CakePHP 公式のブログ作成チュートリアル を見ながらうごうご学習。

データベース準備と CakePHP 設置

$ ls /etc/php.d/

pdo.ini, pdo_mysql.ini の存在を確認。

$ vi /etc/php.ini

timezonedate.timezone = "Asia/Tokyo” を設定。

$ sudo service apache restart
$ wget cakephp_file  # Used 2.2.5
$ unzip cakephp.zip

ディレクトリ構造の解説:app に作ったものを入れる。lib はいじらない。vendorsサードパーティーのプラグインを入れる。詳しくは公式 参照。

続いてユーザーとか作成。このサイト が結構まとまっている。

$ mysql -u root -p
mysql> create database caketutorial;
mysql> grant all privileges on caketutorial.* to caketutorial@localhost identified by 'passoward';
mysql> flush privileges;
mysql> use caketutorial
mysql> exit

ブログデータベースの作成 にある手順で posts テーブルとテスト用記事を作成。

$ vi cakephpdir/app/Config/database.php.default
# Edit $default list
$ mv cakephpdir /var/www/html/
$ sudo chown -R apache:apache /var/www/html/cakephpdir/app/tmp
# chown-ing just this directory will do.

Web ブラウザでアクセスして、次のメッセージを確認。

Your database configuration file is present.
Cake is able to connect to the database.

公式の salt と seed の設定方法 を参考に cakephpdir/app/Config/core.php に乱数を設定。salt には使えない記号があるのかもしれない(最初は何故かエラーになった)。 mod_rewrite まわりでエラーが出てないのが逆に怖いけど完璧にブルーランプが点灯している welcome サイトっぽいのが表示されたのでこれはこれでいいということにしておく。

CakePHP アプリケーションの作成を開始

とにかく命名規則が大事らしい。

Model として Post.php 内に Post クラスを作ると、Controller として PostsController.php 内に PostsController クラスを作ったとき、その中から $this->Post->memberfunction()Post モデルのメンバ関数にアクセスできるようになる。また、PostsController クラスに hoge() 関数を作成した場合、www.example.com/posts/hoge でアクセスできるようになる。しかし URL を意識した命名をする必要はない。routes 機能を使ってルーティングすることができるので。

おおむね ブログチュートリアル のとおりに作っていけばいい。しかしいくつかハマりどころが存在する。

まず、ファイル PostsController.php があるのに「ファイルがありません!」というエラーが表示される。この場合は 解決策 を参考に php ファイルの先頭に <?php をつけたら全てがうまくいった。チュートリアルなんだからそこまで書いておけよって思うけれど、たぶん PHP の基礎なんだろうな。まずは PHP の文法を学んでからコーディングをはじめよう。

ちなみに <?phpPostsController.php の先頭につけておくだけで良いみたいなんだけど、書いてないと気持ち悪いし Vimシンタックスハイライトが使えなくなるから Model/Post.php の先頭にも書いておいた。

これ以降どうやってアプリケーションを作るかとかはこの記事の範疇ではないので略。