例えば、http://localhost/
でplayで作成したアプリケーションを動かし、http://localhost/help/
にpukiwikiを稼働させてアプリケーションのヘルプ機能として活用することを考えます。
pukiwiki
で任意のページを開きたいときは、http://localhost/help/index.php?keyword
のようにページ名を引数として渡します。pukiwiki
をutf-8
で動かしておけば、このURL生成をplayframeworkに半分任せることができます。
# for help
GET /help/index.php?{page} Helper.help
開きたいページが事前に分かっているならこんな感じで記述することができます。
<a href="@{Helper.help('トランジスタ')}">トランジスタとは</a>
例えばアクションに応じたヘルプページを開くリンクを得たいときは下記のようにします。
(request.action
には、"Application.index"
のような文字列が入ります)
Map<String, Object> map = new HashMap<String, Object>();
map.put("page", request.action);
String helpLink = Router.reverse("Helper.help", map).url;
render(helpLink);
こんな感じでURL逆生成したURLを使ってリンクを埋め込めばOKです。
<a href="${helpLink}">このページについての説明</a>
URL逆生成で得られるのはパスだけですので、外部のPukiwikiへ飛ばしたいときは以下のように外部URLと結合してください。
<a href="http://wiki.example.com${helpLink}">Pukiwikiを開く</a>
あと、Pukiwikiへのパス設定が無効だった場合は、標準Routesでは次のようなクラス、メソッドを呼び出そうとします。
public class Helper extends Controller {
public static void help(final String page) { }
}
準備しておけばエラーページへジャンプしたり案内を表示したりするようにしておくフォローができます。
今のところ判明している問題は、ページ名に半角スラッシュが入っているとURL逆生成が意図通りに動きません。
そのようなページ名にならないように注意する必要があります。