とりあえず触ってみる

配布アーカイブの展開

guessworkのアーカイブを展開すると、以下のようなファイルおよびディレクトリが生成されます。

examples/
lib/
public_html/
smarty/
LICENSE
README

guessworkを利用してアプリケーション開発を始める場合は、libディレクトリを任意の場所にコピーするだけで構いません。あとはスクリプトからlib/Guesswork.phpを require_once で読み込むだけでguessworkが使用可能になります。

examples、public_html、smartyの各ディレクトリはサンプルアプリケーション関連ファイルが格納されています。サンプルアプリケーションの実行方法はREADMEを参照してください。

ファイルの配置

guessworkは、配布アーカイブのlibディレクトリにあるGuesswork.phpファイルを読み込むことで利用可能になります。サーバ全体でguessworkを利用する場合は、php.iniのinclude_pathにguessworkのlibディレクトリを含めるとよいでしょう。

UNIXの場合

include_path=".:/php/includes:/path/to/guesswork/lib"

Windowsの場合

include_path=".;c:\php\includes;c:\path\to\guesswork\lib"

上記の設定をしておくと、PHPスクリプト中に

require_once 'Guesswork.php';

と記述することでguessworkを読み込むことができます。

特定のWebアプリケーションでのみguessworkを利用する場合やphp.iniを編集できない場合には、配布アーカイブのlibディレクトリを任意のパスにコピーしておき、スクリプトからは Guesswork.php ファイルを読み込むようにします。

$ cp -R guesswork-0.0.1/lib /home/foo/includes/guesswork

上記のようにlibディレクトリをコピーした場合は、PHPスクリプト中に

require_once '/home/foo/includes/guesswork/Guesswork.php';

と記述してguessworkを読み込みます。

Smartyのインストール

標準ではテンプレートエンジンとしてSmartyを利用するので、別途インストールしておく必要があります。guessworkからSmartyを利用するためには、SmartyのSmarty.class.phpのフルパスを憶えておいてください。

テンプレート用ディレクトリの作成

Smartyが必要とするディレクトリを作成します。

$ mkdir /home/foo/smarty
$ mkdir /home/foo/smarty/templates
$ mkdir /home/foo/smarty/templates_c

作成したディレクトリのうち、templates_cディレクトリはWebサーバの動作権限でファイルの書き込みができるようにしておきます。Webサーバの設定によって指定すべき権限は異なりますが、よくわからない場合は777に設定しておきます(この設定は安全なものではありません)。

$ chmod 777 /home/foo/smarty/templates_c

何もしないアプリケーションの作成

ここまででguessworkを利用する準備が整いましたので、試しにテンプレートファイルを表示するだけのアプリケーションを作成してみます。作成するファイルおよびディレクトリ構成は以下の通りです。ここでは便宜上、/home/fooをホームディレクトリとして説明しますが、自分の環境にあわせて適宜読み替えてください。

/home/foo/public_html/simple.php
  ブラウザがアクセスするアプリケーションの実体
/home/foo/smarty/templates/simple/default.html
  Smarty用のテンプレートファイル

simple.phpがアプリケーションの実体、default.htmlがテンプレートファイルとなります。templates_cディレクトリは、Smartyがテンプレートをコンパイルする際に使用されます。

では、まずアプリケーションの実体となるスクリプトを作成します。

/home/foo/public_html/simple.php:

<?php
require_once '/home/foo/includes/guesswork/Guesswork.php';

// コントローラクラスはControllerを継承する
class SimpleController extends Controller
{
    // Smarty.class.phpのパス
    var $_gw_template_class = "/home/foo/includes/smarty/Smarty.class.php";

    // Smartyのテンプレートファイルが置かれるディレクトリパス
    var $_gw_template_templates_dir = "/home/foo/smarty/templates";

    // Smartyのテンプレートコンパイル用ディレクトリパス
    var $_gw_template_compile_dir = "/home/foo/smarty/templates_c";
}

// コントローラの実行
$controller = new SimpleController();
$controller->process();

exit;
?>

上のスクリプトでは、

  1. コントローラクラスの定義
  2. コントローラの実行

の2つが同じファイルに記述されています。通常、このような場合にはクラス定義と実行部を別ファイルに分割することが多いですが、guessworkではコントローラクラスを複数のスクリプトで共用することが無いため、このような構造を推奨しています(もちろん、クラス定義を別ファイルに抜き出すスタイルでも実害はありません)。

次にテンプレートファイルを作成します。guessworkでは、テンプレートファイルを配置するディレクトリ名およびテンプレートファイル名はコントローラクラス名によって自動的に決定され、SimpleControllerクラスが参照するデフォルトのテンプレートファイルは simple/default.html のようになります(詳細は「テンプレートあれこれ」を参照)。

/home/foo/smarty/templates/simple/default.html:

<html>
  <head>
    <title>何もしないアプリケーション</title>
  </head>
  <body>
    <h1>何もしないアプリケーション</h1>
    <p>
      このアプリケーションは何もしません。
    </p>
  </body>
</html>

以上でアプリケーションの実装は完了です。ブラウザで simple.php にアクセスしてみると、以下のようにページが表示されます。

チュートリアルの実行結果