CakePHP
PHP
概要
CakePHP は PHP の開発フレームワークです。
アプリケーションの開発、メンテナンス、インストールのための仕組みが提供されています。
MVC や ORM といったよくデザインパターンを知っていると、スムーズに開発を行うことが出来ます。
インストール
CakePHP-1.3.2 の例です。
公式サイトからアーカイブをダウンロードし、展開します。
% gzip -dc cakephp-cakephp-1.3.2-0-g0eea0ce.tar.gz |tar xvf - % cd cakephp-cakephp-c7952f2
CakePHP は PHP で書かれていますので、後は適宜設置するだけとなります。
設置方法等は公式サイトの Cookbook にも詳細が書かれていますが、以下ご参考までに私が行った作業例です。
まず、形式的に CakePHP を呼び出すため Web コンテンツとなる app/webroot/index.php を Web 領域コピーし、以下のように修正します。
define('ROOT', '/project/cakephp'); define('APP_DIR', 'app');
次に、展開してできたディレクトリのうち、以下のディレクトリを上記で設定した場所(/project/cakephp)に移動します。
・app
・cake
・plugins
・sql
・vendors
以下、特に指定がない限り、上記のコピーしたファイルが、操作の対象となります。
さらに、app/webroot/.htaccess を index.php と同じディレクトリにコピーし、以下のように修正します。
/path/to/index.php でコピーした index.php が参照できる必要があります。
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /path/to/index.php?url=$1 [QSA,L] </IfModule>
ここまでの作業が終われば app/webroot ディレクトリは不要となりますので、削除します。
次に、app/tmp は CakePHP がテンポラリとして使用するディレクトリなので、Web サーバの実行ユーザーが書き込めるように設定しておく必要があります。
この後、基本設定を行います。
基本設定は、CakePHP:基本設定を参照。
DB 設定
CakePHP は MySQL もしくは、PostgreSQL を使用することを前提としていますので、CakePHP 自体のインストール作業が終わった後に DB の作成を行います。
CakePHP は命名規則がかなり厳格なので、注意が必要です。
例えば、Web フォームを作るため、form というアプリケーションを作ることを考えます。
この場合、フォームに登録されたデータを DB に保存する必要がありますが、このテーブルは forms (複数形であることに注意)という名前にします。
CakePHP では MVC のそれぞれに対応するメソッド、テーブル等々は、往々にして自動的に名前解決して呼び出すように出来ていますので、可能な限り CakePHP の命名規則にあわせるようにします。
なお、作成日時、更新日時を表すフィールドは、それぞれ created, updated としておくと、CakePHP の方で自動的にこれらの処理を行ってくれます。
DB の作成が終わったら、DB 設定を行います。
以下、私が PostgreSQL 使用時に行った設定例です。
'driver' => 'postgres', #'host' => 'localhost', -- TCP/IP 通信は行わない 'login' => 'test_user', 'password' => 'xxxx', 'database' => 'test_db', 'prefix' => 'test_',
上記の prefix の指定により、テーブル名の prefix が 'test_' となります。
従って、この例では上記のテーブルも test_forms という名称で作るようにします。
その他
app/config/routes.phpを設定することで、ルートディレクトリにアクセスされた際の挙動を設定することが出来ます。
デフォルトでは、以下のように設定されています。
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
例えば、これを以下のように変更すると、ルートディレクトリにアクセスされた際には、forms コントローラの index アクションが実行されるようになります。
Router::connect ('/', array('controller'=>'forms', 'action'=>'index'));