Windows10(64bit)環境へZend Framework1.x(1.12.17)をインストールしてみる
2016/05/31
今更ですが Zend Framework 1系統の環境が必要になったので、インストールしてみました。未来への遺産ということで、そのインストール手順を備忘録としてポストします。
Zend Frameworkダウンロード
まずはダウンロード。
下記ページより行います。
↑ 1系統、2系統を選べます。
今回は現段階の1系統最新版である、バージョン 1.12.17 を選択。
↑ ダウンロードするには(会員)登録を行えとのことなので、面倒ですが登録してみます。「Register Now」ボタンをクリック。
下記項目を入力。メールアドレス以外は適当に入力しても大丈夫そうです。
- First Name:名
- Last Name :姓
- Company:会社名
I'm not associated witha a company:無職です(会社には )就職していません - Phone:電話番号
090-1234-5678 の場合、国番号(日本:+81)、最初の0を省いた90からあとの番号となり、最終的には「+81-90-1234-5678」のように記述します。 - Country:国名
- What is your role?:あなたの役割は何ですか?→選択肢を見ると、開発者やら生徒とあるので、役職とか、立場のようです。
↑ 任意のバージョンを選択、ダウンロードします。
↑ zipファイルでダウンロードした ZendFramework-1.12.17
Zend Framework1.x のインストール方法
今回は現段階の1系統最新版である、バージョン 1.12.17 を設置します。
サーバ環境は以下のとおり。
- OS : Windows10(64bit)
- Apache : 2.4
- PHP : 5.6.xx
ちなみに、この環境で古いバージョンの ZendFramework 1.7 も動作したことを備忘録として明記しておきます。
Apache2.4
バーチャルホスト作成
apache24/conf/extra/httpd-vhosts.conf
1 2 3 4 5 6 7 8 9 10 11 12 |
<VirtualHost *:80> ServerAdmin toogie@hoge.com DocumentRoot "I:/website_data/SAMPLESITE.COM/sample-site.com/public_html" ServerName sample-site.localhost ServerAlias sample-site.localhost ErrorLog "| bin/rotatelogs.exe I:/website_data/SAMPLESITE.COM/sample-site.com/logs/firsttest.lh-error_%Y%m.log 86400" CustomLog "| bin/rotatelogs.exe I:/website_data/SAMPLESITE.COM/sample-site.com/logs/firsttest.lh-access_%Y%m.log 86400" combined <Directory "I:/website_data/SAMPLESITE.COM/sample-site.com/public_html"> AllowOverride All Require all granted </Directory> </VirtualHost> |
必ず、AllowOverride All で .haccess を使用出来るようにしてください。
詳細は過去記事を参照。
https://nodoame.net/archives/7124
mod_rewriteを有効に
mod_rewriteを有効にする必要があるので、Apache24/conf/httpd.conf の、下記モジュールのコメントアウトを外してください。
1 |
LoadModule rewrite_module modules/mod_rewrite.so |
詳しくは、過去記事を参照
https://nodoame.net/archives/7071
Zend Framework展開、ディレクトリ構成の例
例として
- indexコントローラー、indexアクション
- Messageコントローラー、helloアクション
を設置する例とします。
ルートディレクトリ(sample-site.com)下に、以下のように展開します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[sample-site.com] ←ルートディレクトリ │ ├[application] ←(非公開ディレクトリ) │ ├[controllers] │ │ ├IndexController.php │ │ └MessageController.php │ ├[models] │ └[views] │ └[scripts] │ ├[index] │ │ └index.phtml │ └[message] │ └hello.phtml │ ├[public_html] ←ドキュメントルート(公開ディレクトリ) │ ├.htaccess │ └index.php │ ├[ZendFramework-1.12.17] ←ZF本体(非公開ディレクトリ) │ └[logs] ←ログ(非公開ディレクトリ) |
※規約であるファイル/ディレクトリの大文字、小文字に気をつけてください
ルートディレクトリ
ルートディレクトリ以下、ドキュメントルートと同列の"非公開エリア"に展開した ZendFramework を配置。
同列に、MVCのコントローラーやビューファイルを設置する application ディレクトリを作成。
モデルはディレクトリだけで、ファイルが無いのがよくわかりませんがw
ドキュメントルート
.htaccessと、index.php を設置。
この index.php を特に「フロントコントローラー」と呼ぶようです。
.htaccess
1 2 |
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php |
index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<?php /** * フロントコントローラ * */ // 言語、ロケール設定 mb_language("ja"); mb_internal_encoding("UTF-8"); // アプリケーション設定 define('BASE_DIR', realpath(dirname(__FILE__)) . '/../ZendFramework-1.12.17'); // $path = BASE_DIR . '/library/'; set_include_path(get_include_path() . PATH_SEPARATOR . $path); // コンポーネントの読み込み require_once 'Zend/Version.php'; // バージョン表示 require_once 'Zend/Controller/Front.php'; // require_once 'Zend/Controller/Action.php'; // // フロントコントラーラのインスタンスを取得 $front = Zend_Controller_Front::getInstance(); // コントローラのディレクトリを設定 $front->SetControllerDirectory('../application/controllers'); // コントローラ実行 $response = $front->dispatch(); // デバッグ関数 function pr($val) { echo '<pre>'; print_r($val); echo '</pre>'; } |
若干、クセのある書き方ですが、概ね上記のような形になると思います。
デバッグ関数は CakePHP でお馴染みのデバッグ関数 pr(); を使いたいがために記述しているだけです。
application(IndexController 関係)
まずは IndexController 関係から。
controllres, models, views という、複数形でそれそれ、コントローラー、モデル、ビュー用のディレクトリを作成。
controllersディレクトリ下に、今回用の IndexController.php を作成。
IndexController.php
1 2 3 4 5 6 7 8 9 |
<?php class IndexController extends Zend_Controller_Action { public function indexAction() { $this->view->setEncoding("utf-8"); $this->view->message = 'Hello world'; // ビュースクリプト側変数へ代入 } } |
viewsディレクトリ下に scripts ディレクトリを作成、scripts下に、コントローラーと対比するように indexディレクトリを作成し、その中にアクションと同名の index.phtml を作成します。
index.phtml
1 2 3 4 5 6 7 8 9 10 11 |
</head> <body> <h1>インデックス</h1> <hr /> <?php echo Zend_Version::VERSION; // 現在のZend Frameworkのバージョンを表示 echo '<br>'; echo $this->escape($this->message); ?> </body> </html> |
http://sample-site.localhost/ にアクセス
↑ 成功すると、上記のようになると思います。
バージョンもきちんと表示されています。
application(MessageController 関係)
同様に、MessageController関係を作成します。
MessageController.php
1 2 3 4 5 6 7 8 9 10 |
<?php class MessageController extends Zend_Controller_Action { public function helloAction() { $this->view->setEncoding("utf-8"); $this->view->message = 'Hello world2'; // ビュースクリプト側変数へ代入 } } |
hello.phtml
1 2 3 4 5 6 7 |
</head> <body> <h1>ハロー!</h1> <hr /> <?php echo $this->escape($this->message);?> </body> </html> |
http://sample-site.localhost/message/hello/ にアクセス。
↑ 成功すると、上記のようになると思います。
「Hello world2」と、メッセージも変わっています。
ひとまずはここまで。