The Cookbook の CakePHP ブログチュートリアルを実践してみる(1)
CakePHP 1.2 の学習を兼ねて The Cookbook の CakePHP ブログチュートリアルを実際に作成してみます ↓↓↓
http://book.cakephp.org/ja/view/219/CakePHP%E3%83%96%E3%83%AD%E3%82%B0%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB
[ 10.1.1 Cakeをダウンロード ]
私のブログの CakePHP のインストールを参考にして cake_blog_tutorial という名前で eclipse のプロジェクトを作成します。
また、http://localhost/cake_blog_tutorial でアクセスできるように Apache の Alias の設定と、CakePHP の .htaccess の設定をします。
[ 10.1.2 ブログデータベースの作成 ]
cake_blog_tutorial というデータベースを作成し、その中にテーブルを作成することにします。文字コードは UTF-8 を使用します。
ターミナルから mysql に root ユーザでログインし、以下のコマンドを入力します。
mysql> CREATE DATABASE cake_blog_tutorial CHARACTER SET utf8;
CREATE TABLE 文 と、複数の INSERT 文を ターミナルから入力するのは手間なので、SQL ファイルを作成し、それを mysql に読み取らせる方法を取ります。テーブルのストレージエンジンは、トランザクション セーフな InnnoDB を。 文字コードは UTF-8 を使用します。
以下の create_table.txt を作成します。
/Users/ユーザ名/create_table.txt
CREATE TABLE posts ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULt NULL ) ENGINE InnoDB CHARACTER SET utf8; INSERT INTO posts(title, body, created, modified ) VALUES( 'title1', 'body1', now(), now() ); INSERT INTO posts(title, body, created, modified ) VALUES( 'title2', 'body2', now(), now() ); INSERT INTO posts(title, body, created, modified ) VALUES( 'title3', 'body3', now(), now() );
ターミナルから mysql に root ユーザでログインし、以下のコマンドを入力します。 source コマンドが mysql に ファイルから SQL 文を読み取らせるためのコマンドです。
mysql> use cake_blog_tutorial mysql> source /Users/ユーザ名/create_table.txt
次に、データベースにアクセスするためのユーザを作成します。
cake_blog_tutorial データベースの全テーブルに対し、SELECT , INSERT , UPDATE , DELETE を行う事ができるユーザ : cake_blog を作成します( パスワード : 12345 )。
ターミナルから mysql に root ユーザでログインし、以下のコマンドを入力します。
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON cake_blog_tutorial.* TO 'cake_blog'@'localhost' IDENTIFIED BY '12345';
CakePHP インストールのつづき ( mod_rewrite の設定 )
CakePHP を動作させるため、URL の書き換えやリダイレクトを行う Apache モジュール mod_rewrite の設定をします。
※ mod_rewrite を利用せずに CakePHP を動作させることも可能です。
まずは mod_rewrite が Apache の起動時にロードされるように設定を編集します。 vi 等のエディタで Apache の設定ファイル /etc/apache2/httpd.conf を開きます。
LoadModule の項目に以下の記述があるか確認します。
無ければ追記します。
# でコメントアウトされていれば # を削除し、コメントを外します。
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
httpd.conf を変更後は apachectl コマンドで Apache を再起動します。
次に mod_rewrite の設定が記述されているCakePHP の .htaccess を修正します。
CakePHP では以下の 3 箇所に .htaccess が存在します。
- CakePHP をインストールしたディレクトリ/.htaccess
- CakePHP をインストールしたディレクトリ/app/.htaccess
- CakePHP をインストールしたディレクトリ/app/webroot/.htaccess
インストールディレクトリは ~/Sites/eclipse_workspace/cake_sample としたので、順にファイルを修正していきます。
~/Sites/eclipse_workspace/cake_sample/.htaccess
RewriteBase を追記します。
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule>
↓↓↓
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase /cake_sample RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule>
~/Sites/eclipse_workspace/cake_sample/app/.htaccess
RewriteBase を追記します。
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule>
↓↓↓
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase /cake_sample/app RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule>
~/Sites/eclipse_workspace/cake_sample/app/.htaccess
RewriteBase を追記します。
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]</IfModule>
↓↓↓
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase /cake_sample/app/webroot RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule>
最後に、CakePHP の tmp ディレクトリのパーミッションを 777 に変更します。
ターミナルから下記のコマンドを入力します。
$ cd /Users/ユーザ名/Sites/eclipse_workspace/cake_blog_tutorial/app $ chmod -R 777 tmp
完了したら http://localhost/cake_sample へアクセスしてみます。
CakePHP のインストールと Apache の仮想ディレクトリ ( Alias ) の設定
以下のページより CakePHP をダウンロードします。
ダウンロードするバージョンは最新の 1.2 系です。
http://cakephp.org/
開発には Eclipse を利用しますので、先に Eclipse を立ち上げ、ワークスペースとプロジェクトを作成しておきます。
ワークスペースは ~/Sites/eclipse_workspace とします。
プロジェクトは cake_sample とします。
ワークスペースとプロジェクトを作成すると ~/Sites/eclipse_workspace/cake_sample ディレクトリが作成されます。
ダウンロードしてきた CakePHP の dmg ファイルをダブルクリックすると、以下のファイル ( フォルダ ) が表示されます。
README 以外のファイル ( フォルダ ) をドラッグして Eclipse の cake_sample プロジェクトの中へ移動させます。
インストールは以上で完了です。
※ Finder で隠しファイルを表示するようにしておかないと .htaccess が表示されず、ドラッグでの移動もできません。
つづいて ~/Sites/eclipse_workspace/cake_sample ディレクトリへ http://localhost/cake_sample/ でアクセス出来るように、Apache の仮想ディレクトリ ( Alias ) の設定をします。
vi 等のエディタで Apache の設定ファイル /etc/apache2/httpd.conf を開きます。
LoadModule の項目に以下の記述があるか確認します。
無ければ追記します。
# でコメントアウトされていれば # を削除し、コメントを外します。
LoadModule alias_module libexec/apache2/mod_alias.so
次に
Alias /cake_sample /Users/ユーザ名/Sites/eclipse_workspace/cake_sample <Directory "/Users/ユーザ名/Sites/eclipse_workspace/cake_sample"> Options ExecCGI Includes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>
httpd.conf を変更後は apachectl コマンドで Apache を再起動します。
このコマンドは一般ユーザには許可されていないため sudo コマンドを利用します。
ターミナルから以下のコマンドを入力します。
$ sudo apachectl restart
次回は mod_rewrite と .htacces の設定を行い、CakePHP の初期ページを表示させます。
CakePHP とは
CakePHP は PHP 用のフレームワークです。
PHP 用のフレームワークとして有名なものは他にも symfony, Zend Framework, CodeIgniter 等々があります。
CakePHP の特徴は以下の通りです。
- Rails の設計思想がベースになっている
- ORM で ActiveRecord を実装している
- PHP4, PHP5 の両方に対応している
- インストールが容易
- 軽量
主な点は以上かと思います。
仕事では symfony を利用しているのですが、symfony は PEAR でインストールしないといけない、symfony 自体がデカイというのが symfony を好きになれない理由です。もちろん、良い点もいっぱいあるのですが ... (苦笑)
symfony と比較しての CakePHP ですが、できることは大差無いのではと思いますし、速度的にも大差は無いはずです。個人的に気に入っているのは
- インストールが容易( ダウンロードして解凍するだけ )
- しっかりとした日本語のフォーラムがある
- CakePHP 本体はデカく無いのでソースを読むのが苦では無い
- DB のカラムを追加等してもモデルクラスを修正する必要が無い
- bake コマンドでソースの自動生成ができる(symfonyにもソースの自動生成コマンドがあったはず ... )
といったところでしょうか。
逆に不便な点として、CakePHP は配列を多用するので、ネストした配列が見づらくなり、かなり不便です。
次回は CakePHP のインストールを行いたいと思います。
Finder で隠しファイルを表示する
Finder では . で始まる隠しファイルはデフォルトで表示されないようになっています。 ( .bash_profile , .htaccess 等々)
Finder で隠しファイルを表示するには以下のコマンドを入力します。
$ defaults write com.apple.finder AppleShowAllFiles TRUE $ killall Finder
反対に、隠しファイルを非表示するには以下のコマンドを入力します。
$ defaults write com.apple.finder AppleShowAllFiles FALSE $ killall Finder
※ killall Finder は、Finder を再起動するためのコマンドです。
統合開発環境 Eclipse ( PDT ) のインストール
PHP の開発がメインとなるので、PDT( PHP Development Tools ) の All-In-One パッケージをインストールします。
以下のサイトより、PDT の All-In-One パッケージ Mac OS X Carbon 用をダウンロードします。
http://www.eclipse.org/pdt/downloads/
ダウンロードしたファイルを解凍し、/Application/eclipse ディレクトリへ展開します。
次に、Eclipse の日本語化プラグイン Pleiades をインストールします。
以下のサイトより、Pleiades の本体ファイルのみをダウンロードします。
http://mergedoc.sourceforge.jp/
ダウンロードしたファイルを解凍し、features ディレクトリ内の jp.sourceforge.mergedoc.pleiades ディレクトリを /Application/eclipse/features ディレクトリ内へ移動します。
同様に、plugins ディレクトリ内の jp.sourceforge.mergedoc.pleiades ディレクトリを /Application/eclipse/plugins ディレクトリ内へ移動します。
最後に Eclipse の設定ファイル eclipse.ini を編集します。
vi 等のエディタで /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini を開きます。
以下の 2 行を削除します。
-showsplash org.eclipse.platform
以下の 1 行を末尾に追記します。
-javaagent:/Applications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=no.mnemonic
Eclipse を起動します。
Pleiades 等のプラグインをインストールした初回起動時のみ -clean オプションをつけて起動する必要があります。
ターミナルから以下のコマンドを入力します。
$ /Applications/eclipse/eclipse -clean
PHP と MySQL の連携
PHP が参照している MySQL ソケットファイルのパスを修正します。
まずソケットファイルのパスを確認します。
ターミナルから MySQL へアクセスし、以下のコマンドを入力します。
mysql> status
・・・ UNIX socket: /tmp/mysql.sock ・・・
表示されたステータスのうち、上記の部分がソケットファイルのパスです。
上記をもとに PHP の設定ファイル /etc/php.ini を編集します。
/etc/php.ini が存在しない場合は /etc/php.ini.default をコピーして作成します。
ターミナルから以下のコマンドを入力します。
一般ユーザには許可されていないディレクトリのファイルを操作するので sudo コマンドを利用します。
$ sudo cp /etc/php.ini.default /etc/php.ini $ sudo chmod 644 /etc/php.ini
vi 等のエディタで /etc/php.ini を開きます。
以下の行を修正します。
mysql.default_socket =
↓ ↓ ↓
mysql.default_socket = /tmp/mysql.sock
php.ini を変更後は apachectl コマンドで Apache を再起動します。
このコマンドは一般ユーザには許可されていないため sudo コマンドを利用します。
ターミナルから以下のコマンドを入力します。
$ sudo apachectl restart