Piece_Unity 1.7.x 以降のバージョンのエントリポイントを一つにまとめる。

No Comments

Piece_Unity 1.7.0以降、URLマッピングに利用される変数が、$_SERVER['SCRIPT_NAME']ではなく$_SERVER['REQUEST_URI'] に変更されました。

以前に利用されていた定義済の変数$_SERVER['SCRIPT_NAME']はmod_rewriteによってURLが書き換えられた場合、書き換え後のURLが格納されます。
このため、continuation.phpで、$_SERVER['SCRIPT_NAME']の値を書き換え前のURIに戻すためのやや複雑な処理を記述する必要がありました。

一方、 $_SERVER['REQUEST_URI']は、mod_rewriteの影響をうけないので、この書き換え処理は不要ですので、非常に簡単にエントリポイントを一つのファイルにまとめることができます。

例えば、こちらで紹介されているサンプルアプリケーションの場合、.htaccessファイルをwww/htdocs/直下に作成し、下記のような記述を行います.

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ continuation.php
</IfModule>

これで、リクエストされたファイルが存在しない(ファイルでもディレクトリでもない)場合、continuation.phpが呼ばれることになります。

このcontinuation.phpファイルの記述は、www/htdocs/order.phpの内容とまったく同じです。

<?php
require dirname(__FILE__) . '/../webapp/config/bootstrap.php';

Piece_Unity::createRuntime()->dispatch();

このファイルをwww/htdocs/continuation.phpとして保存します。

フローの登録は通常どおり必要となります。このときに指定するURIは、書き換え前のものとなります。

...
- name: flowMappings
type: configuration
value:
- url: /register-with-non-exclusive-mode.php
flowName: Registration
isExclusive: false
...
# 上と同じインデント (字下げ) レベルに以下の 3 行を追加
- uri: /order.php
flowName: Order
isExclusive: false
...

これで、エントリポイントorder.phpは不要となりました。www/htdocs/order.phpを削除して、ブラウザでhttp://localhost/order.phpへアクセスしてみてください。order.phpを削除したのにも関わらず、正しく動作するはずです。

Be the first to write a comment!