このヒントは、XForms に関する特定のタスクについてのヒントです。XFroms についての背景となる情報については、3 回シリーズの「XForms 入門」を参照してください。
このヒントで説明する XForms のサンプルは、(XForms エクステンションをインストールした) Firefox 1.5 と、Formsplayer コントロールをインストールした Microsoft® Internet Explorer 6 でテストされ、動作しています。ダウンロードには、Firefox 用の XHTML ファイルと IE 用の HTML ファイルが含まれています。
まず、インスタンス文書から始めましょう。作業の対象として、少し深みを持ったインスタンスを作ります (リスト 1)。
リスト 1. インスタンス文書
<?xml version="1.0" encoding="UTF-8"?>
<inventory>
<book>
<author>Nick Chase</author>
<title>XML Primer Plus</title>
<publisher>Sams</publisher>
</book>
<book>
<author>Earth</author>
<title>David Brin</title>
<publisher>Spectra</publisher>
</book>
<movie>
<director>Steven Spielberg</director>
<title>Raiders of the Lost Ark</title>
<actor>Harrison Ford</actor>
<actor>Karen Allen</actor>
</movie>
<movie>
<director>Rob Reiner</director>
<title>The American President</title>
<actor>Michael Douglas</actor>
<actor>Annette Bening</actor>
<actor>Martin Sheen</actor>
</movie>
</inventory>
|
このデータを扱うフォームは、ごく単純です (リスト 2)。
リスト 2. データを扱う
<?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xforms="http://www.w3.org/2002/xforms">
<head>
<title>Instance Data-To-XHTML/XForms Example</title>
<xforms:model id="model_inventory">
<xforms:instance id="instance_model_inventory" src="inventory.xml"/>
<xforms:submission id="submit_model_inventory"
action="http://localhost/xforms.php"
method="post"/>
</xforms:model>
</head>
<body>
<xforms:submit submission="submit_model_inventory">
<xforms:label>Submit</xforms:label>
</xforms:submit>
</body>
</html>
|
このフォームは、インスタンス文書を、そのままの形で単純に送信します (図 1)。
図 1. フォーム
今度は実際の PHP を扱う番です。XForms フォーム・データは、POST リクエストの内容としてサーバーに送信されます。そのため、PHP を使ってそのデータにアクセスするには、$HTTP_RAW_POST_DATA 変数の内容にアクセスする必要があります (リスト 3)。
リスト 3. 基本的な PHP
<?php
if (!isset($HTTP_RAW_POST_DATA))
$HTTP_RAW_POST_DATA = file_get_contents("php://input");
header("Content-type: text/plain");
echo $HTTP_RAW_POST_DATA;
?>
|
$HTTP_RAW_POST_DATA 変数は、多くの PHP インストールではデフォルトで設定されず、特定の設定変更が必要です。幸い、入力ストリームからデータを読み取る file_get_contents() 関数を使って、手動でデータを追加することができます。
XML を表現するストリングが用意できたら、レスポンスの Content-type を text/plain に設定し、変数の内容をエコーすることで、そのストリングをプレーン・テキストとしてブラウザーに出力することができます。インスタンス文書は、フォームを送信した時とまったく同じに見えるはずです (図 2)。
図 2. インスタンス文書
これは素晴らしいことですが、では実際のデータの扱いに関してはどうでしょう。幸い PHP では、XML でフォーマットされたテキストのストリングから容易に DOM ドキュメントを作成できるのです (リスト 4)。
リスト 4. データを扱う
<?php
if (!isset($HTTP_RAW_POST_DATA))
$HTTP_RAW_POST_DATA = file_get_contents("php://input");
$doc = new DOMDocument();
q $doc->loadXML($HTTP_RAW_POST_DATA);
$allBooks = $doc->getElementsByTagName('book');
$numBooks = $allBooks->length;
$allMovies = $doc->getElementsByTagName('movie');
$numMovies = $allMovies->length;
echo "There are ".$numBooks." books and ".$numMovies." movies.";
?>
|
この場合では、新しい DOM ドキュメントを作成し、次に loadXML() 関数を使ってデータをロードすることができます。これ以降は、まるでファイルや他のソースからデータをロードしたかのように、好きなように DOM ドキュメントを操作することができます。この場合、結果は図 3 のようになるはずです。
図 3. 最終的な結果
XForms は、XML データを HTTP POST リクエストの内容として送信します。そのため、XML データをアプリケーションの中で使うためには、単純に $HTTP_RAW_POST_DATA 変数の内容を読み取ればよいのです。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| PHP XForms sample code | phpdatafiles.zip | 3KB | HTTP |
学ぶために
-
このシリーズは、XForms を使い始めるためのガイドとして最適です。
- 3 回シリーズのチュートリアル、「Learning PHP」は、PHP を理解するための出発点になるでしょう。
-
developerWorks のXML ゾーンには、XForms や他の XML技術に関する皆さんのスキルを向上するために役立つ資料が豊富に用意されています。
-
developerWorks のOpen Source ゾーンには、皆さんの PHP スキルを向上するために役立つ資料が豊富に用意されています。
-
technology bookstoreには、この記事や他の技術的な話題に関する本が豊富に取り揃えられています。
製品や技術を入手するために
- IE で XForms を表示するためのオープン・ソース・コントロールであるMozzIEを入手してください。
議論するために
