WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

ZendFrameworkをインストールしてHelloWorld!を出力するまでの手順

      2012/12/21

Zend Framework をインストールしてHello Worldを出力するまでの手順を記します。

Zend Framework のダウンロードと解凍

Zend Framework のインストールは、ファイルをダウンロードしてパスを通すだけで簡単に行えます。

まず、以下のURLから Zend Framework をダウンロードします。
http://framework.zend.com/download

# wget http://framework.zend.com/releases/ZendFramework-1.10.3/ZendFramework-1.10.3.tar.gz

ダウンロードした Zend Framework を解凍して展開し、php.ini内のディレクティブを設定し、パスを通します。

ここでは”/usr/share/php”に展開しました。

# tar pzxvf ZendFramework-1.10.3.tar.gz -C /usr/share/php
# vi /etc/php.ini
...
include_path = ".:/usr/share/php:/usr/share/pear:/usr/share/php/ZendFramework-1.10.3/library"
...

ZendFrameworkのディレクトリ構造とフロントコントローラーの準備

ZendFrameworkのディレクトリ構造は以下のようになっています。

-/application
  |-/controllers (アクションコントローラ格納ディレクトリ)
  |-/views (ビュー関連のスクリプト格納ディレクトリ)
     |-scripts (ビュースクリプト格納ディレクトリ)
       |-/index (コントローラ名)
          |-index.phtml (ビュースクリプト)
-/html (公開ディレクトリ)
 |- .htaccess
 |_ index.php

上記のディレクトリ構造の通り、公開フォルダにはindex.phpと.htaccessの2つのファイルしかありません。
画像やcssファイル、JavaScriptなどもこの公開フォルダに設置しますが、PHPスクリプトはindex.phpひとつだけになります。
ZendFramework では、すべてのリクエストをindex.phpで受けることになります。
index.php にはフロントコントローラと呼ばれる仕組みが設置してあり、そのフロントコントローラが全リクエストを一元的に受けつけ、そのリクエストの内容に応じた処理を行う、アクションコントローラに振り分けます(下図参照)。

フロントコントローラの準備

index.phpにすべてのリクエストを集中させるために、公開ディレクトリの.htaccessは以下の用に記述します。

.htaccess
RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

フロントコントローラを設置するindex.phpの内容は以下の通りです。

index.php
<?php echo '<?php'; ?>

define('APP', '../application/');    // アプリケーションディレクトリへのパスを定義
require_once 'Zend/Controller/Front.php';    // ZendFrameworkフロントコントローラスクリプト読み込み

$front = Zend_Controller_Front::getInstance();    // Zend_Controller_Frontインスタンスを生成
$front->setControllerDirectory(APP . 'controllers');    // アクションコントローラ格納ディレクトリのパスをセット
$front->dispatch();    // アクションコントローラへリクエストを振り分け#/entities#

このフロントコントローラのインスタンスへ、アクションコントローラを格納するディレクトリをセットしています。

アクションコントローラの準備

アクションコントローラとは、フロントコントローラから振り分けられたリクエストに対して何らかの処理を行う部分です。
アクションコントローラでの処理はビュースクリプト(※詳しくは後述)というユーザインタフェースを出力する部分に渡されます。
つまりアクションコントローラは動的な部分を担うものであり、通常のHTMLファイルのように静的に出力を行う場合は処理を実装しないでそのままビュースクリプトを出力することもできます。

ここでは以下のようなIndexControllerというアクションコントローラを用意します。
このスクリプトではビュースクリプトで出力するビュー変数というものを設定しています。

IndexController.php
<?php echo '<?php'; ?>

require_once 'Zend/Controller/Action.php';

class IndexController extends Zend_Controller_Action{
    public function indexAction() {
        $this->view->result = 'Hello World!';
    }
}

アクションコントローラを定義するスクリプトは、ファイル名、クラス名、メソッド名が命名規則にしたがって定められている必要があります。
ファイル名は拡張子以前をクラス名”例:クラス名.php”という形式に、クラス名は”コントローラ名Controller”という形式に、メソッド名は”アクション名Action”という形式にそれぞれ従う必要があります。
下表はアクションコントローラの命名規則のまとめです。

命名規則 命名例
ファイル名 クラス名.php IndexController.php hogeController.php
クラス名 コントローラ名Controller IndexController hogeController
メソッド名 indexAction indexAction hogeAction

また、アクションコントローラを定義するときは、上のスクリプトのように、Zend_Controller_Actionクラスを継承する必要があります。

このスクリプトはフロントコントローラ内で設定したアクションコントローラ格納ディレクトリに保存してください。
前出のスクリプトでは ../application/controllers 、つまりドキュメントルートのひとつ上の階層のapplication/controllersに置いています。

ビュースクリプトの準備

前述した通り、ビュースクリプトはユーザインターフェースの部分を担当するものです。
ここでは下記のようなビュー変数を出力するだけのシンプルなビュースクリプト、index.phtmlを用意します。

index.phtml
<!DOCTYPE HTML>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Zend Framework で HelloWorld!</title>
</head>
<body>
  &lt;?php echo $this->escape($this->result); ?&gt;
</body>
</html>

ZendFrameworkではデフォルトでは「自動レンダリングモード」というモードが有効になっています。
自動レンダリングモードが有効になっていると、アクションコントローラで定義したアクションが実行された後、対応するビュースクリプトが自動的に呼び出され、出力が実行されます。
このビュースクリプトはIndexControllerのIndexアクションに対応するものです。

このスクリプトは、application/views/scripts/index に設置します。

ZendFramework を利用したMVCモデルでのHelloWorld

これまでに用意したスクリプトをそれぞれ適切なディレクトリに配置し、ブラウザからアクセスすると、アクションコントローラ内で定義したビュー変数がビュースクリプトに渡り、HelloWorld!と出力されます。

本来ならZendFrameworkで構築されるWEBアプリは、URLにコントローラ名やアクション名、パラメータなどを含んだZendFramework特有の独特な形式になる(※詳しくは別頁で解説)のですが、ここでは単に”http://ホスト名/(例:http://localhost/)”でアクセスするとフレームワークが動作します。

これは、今回のサンプルのコントローラ名がIndex・アクション名がindexとなっているからです。
このようなアクションコントローラはデフォルトコントローラと呼ばれ、URLにコントローラ名やアクション名を含めなくても実行することができます。

 - ZendFramework , ,