ZendFramework2ガイド

入門編

導入

環境構築

まずはZend2のパッケージをダウンロードします。パッケージは以下のURLからダウンロードできます。
http://framework.zend.com/downloads/latest

次に、GitHubでZend2を利用して作成するアプリケーションの基本的なディレクトリ構造の空のサンプルとしてスケルトンアプリケーションが配布されています。
これをダウンロードし、そこから作っていくのが良いでしょう。

スケルトンアプリケーションは以下のURLの右の方にある"Download ZIP"からダウンロードします。
https://github.com/zendframework/ZendSkeletonApplication



ダウンロードしたスケルトンアプリケーションのzipを解答すると以下のようなディレクトリ構造になっています。

config/  
 ∟autoload/  
  ∟global.php  
  ∟local.php.dist  
 ∟application.config.php アプリケーション全体の設定
data/ システムから出力されるファイルファイルなどの置き場として使用。例えばログファイルやキャッシュファイル、ユーザーのアップロードファイル等。システムから書き込みが可能な権限設定にしておく。
module/ アプリケーションのプログラムファイルを格納するメインディレクトリ。この直下に復数のモジュールディレクトリを配置。
 ∟Application/ これはスケルトンアプリケーションのサンプルモジュール。実際はこれをコピーするなどしてモジュールディレクトリを作る。
  ∟config/  
   ∟module.config.php モジュール内の共通設定。
  ∟language/ 多言語対応用の翻訳ファイル群を格納するディレクトリ。
  ∟src/ MVCアプリケーションのクラスファイル格納ディレクトリ。直下に復数の名前空間ディレクトリを配置。
   ∟Application/ スケルトンアプリケーションのサンプル名前空間ディレクトリ。
    ∟Controller/ MVCのコントローラークラス格納ディレクトリ。
  ∟view/ ビューテンプレート格納ディレクトリ。
   ∟application/ Applicationモジュールのテンプレート格納ディレクトリ。
   ∟layout/ レイアウトテンプレートを格納する。
   ∟error/ エラーテンプレートを格納する。
    ∟404.phtml Not Found時に表示するHTMLテンプレート。
    ∟index.phtml 例外エラー発生時に表示するHTMLテンプレート。
public/ WEB公開ディレクトリ。ApacheなどのWEBサーバーのドキュメントルートとしてここを設定する。
vendor/ サードパーティのライブラリ等を配置するディレクトリ。ZendFramework2自体もここに配置する。

ダウンロードしたZend2のパッケージを解答し、vendor/ZF2ディレクトリ内に配置します。
以下のようなディレクトリ階層になるようにします。

vendor
 ∟ZF2
  ∟library
   ∟Zend

これで準備は完了。

Webサーバー(Apache)の設定

サイトを立ち上げるにはまずはドメインの取得が必要ですが、ここでは取得済みであることを前提に説明していきます。
ドメインは、www.zf2app.netということにしましょう。実際は公開予定のドメインで置き換えて考えてください。
また、ここではWebサーバーソフトウェアとしてApacheの使用を前提に説明します。Apacheのインストールディレクトリも/etc/httpdを前提にしていますが、環境により/usr/local/apacheだったりと、違う可能性があるので読み替えてください。

バーチャルホストの設定

まずはこのドメインでアクセスがあった場合に、今回Zend2を使って立ち上げるWebアプリが表示されるようにバーチャルホストの設定が必要です。
以下はhttpd.confの設定例ですが、実際の環境により違いはあると思います。一つの例としてみてください。

/etc/httpd/conf/httpd.conf
<VirtualHost *:80>
    ServerName www.zf2app.net
    DocumentRoot /home/www/zf2app/public

    <Directory /home/www/zf2app/public>
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

mod_rewriteの有効化

Zend2はmod_rewriteを利用してアクセスを全てindex.phpへ集中させる事で動作します。
なのでmod_rewriteの有効化が必須です。
httpd.confの以下の行が存在し、有効になっていることを確認します。もしコメントになっていたらコメントを外します。

/etc/httpd/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so

Apacheの再起動

Apacheの設定を何か変更したら、それを反映するためにApacheの再起動が必要です。
再起動方法も環境により異なりますが、以下に3つの例を示しますが、環境やお好みで。

$ service httpd restart

$ apachectl restart

$ /etc/init.d/httpd restart

.htaccess

リライトの設定のために、.htaccessは必須です。
スケルトンアプリケーションには.htaccessは最初から用意されており、中身もそのままで大抵は問題ありません。

public/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]

ドメイン未取得の場合の一時的な設定

ドメインが取得済みで、DNS設定も正しく行っている場合は上記設定でブラウザからアクセスが可能ですが、開発段階ではドメイン未取得ということもよくあります。この場合は開発を行うパソコンなどのクライアントのhostsファイルにドメインとIPアドレスの対応を記述することで一時的にブラウザからドメインでアクセスが可能な状態を作り出すとよいでしょう。
以下はWindows端末での設定です。Windowsのバージョンによりhostsファイルのありかは違うと思います。

C:\Windows\System32\drivers\etc\hosts
# サーバーのIPが1.2.3.4の場合
1.2.3.4    www.zf2app.net

動作確認

Zend2の動作確認をしてみましょう。
設定したドメインにブラウザからアクセスしてみてください。
以下の様な画面が表示されればOKです。

更にHello worldでもやってみましょう。

スケルトンアプリケーションのmodules/Application/src/Application/Controller/IndexController.phpを開き、helloActionメソッドを追加します。
とりあえずは以下のようにしてみてください。

modules/Application/src/Application/Controller/IndexController.php
class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
    
    public function helloAction()
    {
    $viewModel =  new ViewModel();
	$viewModel->message = 'Hello, world!';
        return $viewModel;
    }
}

次に、modules/Application/view/application/index/ディレクトリ内にhello.phtmlというファイルを作り、以下のように記述してください。

modules/Application/view/application/index/hello.phtml
<?php

echo $message

そして、ブラウザから/application/index/helloへアクセスしてみてください。
Hello, world!と表示されればOKです。