「PHP」のフレームワークの比較と選択、動作環境づくり
「CakePHP」のフレームワーク動作環境づくり
『CakePHP』のインストール※画像クリックで拡大表示(リンク)
- CakePHP2.xのダウンロードと設定
CakePHPの日本語ダウンロードサイトから最新版「CakePHP 2.5.1 安定版」をクリックしてダウンロードする。
- 「CakePHP2」のMVCは
モデル(Model)は、アプリケーションのメインロジックを形成して、(データベースの)データと連携して処理を行い、処理結果をコントローラーに渡します。
ビュー(View)は、WEBアプリケーションにおけるインターフェイス部分に関わり、モデルやコントローラーよって作り出されたデータをもとにHTML生成を行う処理です。
コントローラー(Controller)は、リクエスト情報を直接処理し、モデルとビューを制御します。コントローラーのクラス構造はURLに直結するもので、コントローラークラスとそのメソッドの組み合わせでURLが形成されます。
- ブラウザからの「REQUEST」から「HTML出力」の「RESPOSE」までの流れ
- ブラウザから、Webサーバに「REQUEST」を送信
- 「Dispatcher」を通してURLを解析してパラメータを取出し
- リクエストされたURLは、「Router」によって、コントローラのアクション(メソッド)にマップ
- コントローラは、(データベースから)アプリケーションのデータを取り出すためにモデルを使用し、I/O処理、ビヘイビア、データMappingが動作する
- モデルがデータを取得してコントローラに送られ、コールバック設定されていれば、モデルが動作
- コントローラは、コンポーネントを使用して、データをさらに調整したり、セッション操作、認証、メールの送信などを行う
- コントローラのset()メソッドにより、コントローラがモデルとコンポーネントから準備したデータをビューに渡す
- ビューのロジックが動作して、エレメントやヘルパーなどがあれば使用され、レイアウト化されたHTMLドキュメントを生成
- コントローラを通して、生成されたHTMLドキュメントを「RESPOSE」して、ブラウザに表示
- URL振り分けの命名規則
コントローラは、命名規約があり"Controller"を付加して区別し、URLのパスのコントロール(変換)するApacheの「mod_rewrite」を利用し、「[controller_name]/[action]/parameter」の形式を実現します。又「routes.php」の設定によるコントロールも可能です。
[webroot]下に「img,css,js,file」などのリンクファイルを配置して、物理的なリンク方法として設定します。
CakePHPの命名規則(PDF) - MVCの機能追加
- コントローラの機能追加は、コントローラの実行前(beforeFilter)、実行後のフィルタ(afterFilter)とコントローラの実行後のビューの表示"render"前(beforeRender)の機能拡張ができ、"components"フォルダに追加します。
- ビューの機能追加は、ヘルパー(helpers)によって、複数のビューから共通の表現用ロジックにアクセスできるようにし、レイアウト(layout)とエレメント(element)によってビューコードの再利用を促進します。
- モデルの機能追加は、モデル間で共通の機能を追加する方法として利用できるように"behaviors"に配置し、RSSフィード、CVSファイル、LDAPエントリ、iCalイベントなどのモデルが扱えるようなデータソースを"datasources"に配置します。
- アプリケーションの機能追加は、モデル、コントローラ、ビューをパッケージ化したものをプラグイン(plugin)として複数のアプリケーションで使えるようにできます。
- ブラウザからの「REQUEST」から「HTML出力」の「RESPOSE」までの流れ
- ダウンロードした「cakephp-2.5.1.zip」を解凍して、WEBサーバのドキュメントルートに「_cakephp」として配置します。
アプリケーション開発した内容は、一般的に「app」フォルダに設置します。
【 CakePHPのフォルダ構造 】C:¥WEBserver¥htdocs¥
├ _cakephp ←リネームした「CakePHP用」フォルダ
├ app ←「CakePHP」アプリケーションのフォルダ
├ Config ←構成設定のフォルダ
├ Controller ←コントローラのフォルダ
├ Model ←モデルのフォルダ
├ Plugin ←debugツール等のフォルダ
├ View ←ビュー(テンプレート)
├ Vendor ←外部作成のクラスやライブラリ
├ webroot ←運用時のドキュメントルート
├ .htaccess ←Apache「mod_rewrite」設定
├ .htaccess ←Apache「mod_rewrite」の設定
├ ...
├ lib ←「Cakeライブラリ」フォルダ
├ plugins
├ vendors
├ .htaccess ←Apache「mod_rewrite」の設定
├ index.php
├ ...
- WEBサーバ「Apache」用の初期設定ファイル「httpd.conf」の追加変更内容は
- 「rewrite_module」が有効であることの確認
- 「IfModule alias_module」ディレクティブの仮想ディレクトリ「cake」に対する「ScriptAlias cake [絶対パス]」の追加(運用時のルート'webroot'のパス設定)
- 「_cakephp」フォルダに対する「Directory」ディレクティブのアクセス制御の追加
LoadModule rewrite_module modules/mod_rewrite.so
Apache用の「httpd.conf」設定ファイル:「httpd_cakephp.zip」のダウンロード
; ↑ 154行目:有効の確認
<IfModule alias_module> ;← 332行目辺り
ScriptAlias /cake/ "C:/WEBserver/htdocs/_cakephp/app/webroot/"
;↑ 360行目辺りに仮想ディレクトリ「cake」の追加
</IfModule>
...
;↓ 390行目辺りに「_cakephp」のアクセス制御の追加
<Directory "C:/WEBserver/htdocs/_cakephp/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
...
※「httpd.conf」の変更した内容は、「Apache」の再起動して有効となります。 - 「Apache」用のアクセス制御ファイル「.htaccess」は
「mod_rewrite」について記述し、ダウンロードした内容を変更する必要はありません。
- WEBサーバ「Apache」用の初期設定ファイル「httpd.conf」の追加変更内容は
「PHPUnit」のインストールと設置
- 「PHPUnit」のインストール
PHPのテスト環境として、フレームワークで広く利用されている「PHPUnit」をインストールします。やり方は、[1]「PEAR」(2014年12月末で終了)、[2] PHP Archive (PHAR)、[3] Composerなどがあり、Composerによるインストールを実施します。C:¥PHP>php composer.phar create-project PHPUnit/phpunit /PHPUnit/ 4.1.*
インストールされた「C:¥PHPUnit」直下にある「vendor」フォルダをコピーして「C:¥PHP¥includes¥」フォルダに設置し、「PHPUnit」にリネームして、PHPからincludeできるようにパスを通します。
Installing phpunit/phpunit (4.1.3)
- Installing phpunit/phpunit (4.1.3)
... - 「xdebug」のPHP拡張モジュールのインストール
PECLサイトの「xdebug」から、最新版「DLL」をクリックする。
「PHP5.3 Thread Safe (TS) x86」をダウンロードする。
解凍して、「php_xdebug.dll」を「C:¥PHP¥ext」にコピー&ペーストして、PHP初期設定ファイル「php.ini」に「zend_extension= "C:¥php¥ext¥php_xdebug.dll"」(絶対パス指定)を追加して更新します。Apacheの再起動で「xdebug」が有効になります。
「CakePHP」のフレームワーク設定
- 「CakePHP」の初期状態の確認
「 CakePHP」のブラウザからlocalhostのパス「/_cakephp/」を入力して、起動すると初期起動時には、エラー(背景色:赤)、警告(背景色:黄色)のメッセージが表示されますので、構成の設定が必要です。
- 「CakePHP」の初期設定
- 「Security.salt」と「Security.cipherSeed」の値の生成
先頭に表示されているエラーは、「Security.salt」と「Security.cipherSeed」のデフォルト値の書き換えが必要なため、PHPプログラムで作成します。
「Security.salt」は英数字、「Security.cipherSeed」は数字のランダムな値に設定するため、以下に乱数発生するPHPプログラムを明示します。<?php
core.php用の設定値生成プログラム:「core_value_make.zip」のダウンロード
//Security.cipherSeedのvalue→
$num = ''; for($i=0;$i<10;$i++){$num .= rand(100,999);}
echo 'Security.cipherSeed=',$num,'<br>';
//Security.saltのvalue→
$num = ''; for($i=0;$i<10;$i++){$num .= rand(100,999);}
echo 'Security.salt=',sha1($num),'<br>';
?>
ダウンロードしたプログラムを解凍して、実行して生成した値を得ます。
- 「Security.salt」と「Security.cipherSeed」のデフォルト値の書き換え
実行して生成した値で、「_cakephp¥app¥Config¥」にある「core.php」プログラムの修正を行います。
Configure::write('Security.salt', '531568a8f38a3b9e366f8b188a5da1db8856a1c3'); ←225行目当り
Configure::write('Security.cipherSeed', '597573877235152469866303373983'); ←230行目当り - 「CakePHP」用のデータベース構成の設定
黄色の背景色である警告は、「データベース構成のファイルがない」内容で、「_cakephp¥app¥Config¥」にある「database.php.default」を以下のように修正して新たな「database.php」ファイルを作成します。class DATABASE_CONFIG {
...
'login' => 'root', ←71,82行目当り
'password' => 'admin', ←72,83行目当り
'database' => 'cakephp', ←73,84行目当り - MySQLの「CakePHP」用のデータベース作成
コマンドプロンプトで「MySQL」を起動し、「CakePHP」用のデータベース構成で設定した「cakephp」のデータベース作成します。mysql> create database cakephp;
Query OK, 1 row affected (0.00 sec)
mysql>
- 「Security.salt」と「Security.cipherSeed」の値の生成
- 「CakePHP」用のdebug_kitのダウンロードと設定
残りの黄色の背景色である警告は、「DebugKitがインストールされていない」内容で、「GitHub」サイトからダウンロードします。
- 「DebugKit」の配置
ダウンロードした「debug_kit-master.zip」を解凍して、「_cakephp¥app¥Plugin¥」のフォルダ内に「DebugKit」にリネームして配置します。 - 「bootstrap.php」の設定の編集
「_cakephp¥app¥Config¥」にある「bootstrap.php」の67~71行目付近を編集、コメントアウトされているので、コメントアウトを外す。
- 「AppController.php」の設定の編集
「_cakephp¥app¥Controller¥」にある「AppController.php」の33行目付近に
「public $components=array('DebugKit.Toolbar');」の内容を追加する。class AppController extends Controller {
public $components=array('DebugKit.Toolbar'); ←追加
}
- 「DebugKit」の配置
- 「CakePHP」の環境設定の再確認
上記の内容の修正を実施した後、再度「/_cakephp/」下のindex.phpを起動して、[1]データベース構成有り、[2]CakePHPのデータベース接続、[3]DebugKitプラグイン有りを含めて、すべて背景色が緑色になっているとOKです。
「CakePHP」の動作確認
- 「Hello World!」と表示するコントローラ作成
「HelloController.php」のプログラムを作成して「_cakephp¥app¥Controller¥」に配置します。<?php
「Hello World!」表示プログラム:「HelloController.zip」のダウンロード
class HelloController extends AppController{
// Viewをしないので、false
public $autoRender = false;
// indexアクション
public function index() {
echo "Hello World!";
}
}
- 「HelloController.php」の起動
ブラウザから「/_cakephp/hello/」のパスを入力して、「HelloController.php」プログラムを起動します。
「Hello World!」と表示されることを確認します。
- webrootの「cake」の起動
仮想ディレクトリの「cake」を入力して起動すると、webrootのindex.phpが起動されます。
「URL rewriting is not properly configured on your server.」のエラーが表示された場合は、「_cakephp¥app¥View¥Pages」にある「home.ctp」テンプレートファイルの26行目を以下のように「!」を追加します。
if(!file_exists(WWW_ROOT.'css'.DS.'cake.generic.css'));
修正すると以下のように背景色の赤がないページが表示されれば、OKです。