May 8

逆引きrhaco27: かっこいいURL(?)を使う(その1:テンプレートでそのまま表示)

rhacoで

/index.php/path/to/action

みたいなURLを使用する方法です。
mod_rewriteを使うとindex.phpも要らなくなりますが、それはrhacoとは関係無いので省略。rhacoのアプリ「blogkit」に簡単な例を書いてあるので見たら良いと思います。

注意:
1.phpがcgiモードだと動かなかったと思います。
2.rhacoはsvnのtrunkを使用して下さい(リリース版はこの書き方では動きません)

上のパスを
1.テンプレートでそのまま表示
2.generic.ViewsMapperを使って表示
3.index.php内に関数を作り、それを使って表示
4.library下にクラスを作り、それを使って表示

に当てはめることが出来ます。
今回はテンプレートでそのまま表示してみます。

index.php
<?php
require_once("./__init__.php");
Rhaco::import("generic.Urls");
$pattern = array("^path\/to\/action\/?$"=>array("template"=>F::path(Rhaco::constant("TEMPLATE_PATH"),"path_to_action.html")));
$parser = Urls::parser($pattern);
$parser->write();
?>


resources/templates/path_to_action.html
<html>
<head>
<title>テストテンプレート</title>
</head>
<body>
テスト
</body>
</html>


テンプレートに値を入れたい場合は
index.php
<?php
require_once("./__init__.php");
Rhaco::import("generic.Urls");
$pattern = array("^path\/to\/action\/?$"=>array("template"=>F::path(Rhaco::constant("TEMPLATE_PATH"),"path_to_action.html"),"var"=>array("content"=>"てすと")));
$parser = Urls::parser($pattern);
$parser->write();
?>

または
<?php
require_once("./__init__.php");
Rhaco::import("generic.Urls");
$pattern = array("^path\/to\/action\/?$"=>array("template"=>F::path(Rhaco::constant("TEMPLATE_PATH"),"path_to_action.html")));
$parser = Urls::parser($pattern);
$parser->setVariable("content","てすと");
$parser->write();
?>


resources/templates/path_to_action.html
<html>
<head>
<title>テストテンプレート</title>
</head>
<body>
{$content}
</body>
</html>

とすればテンプレートに値を入れて表示してくれます。

Urlsの引数は
array(
"パスの正規表現"=>
  array("マッチした場合に呼び出す条件"),
"パスの正規表現"=>
  array("マッチした場合に呼び出す条件"),
...
)

で表現します。今回は"マッチした場合に呼び出す条件"として「テンプレート」と「テンプレートにセットする値」を指定しました。次回はgeneric.ViewsMapperを使います。

| comment(0)

このエントリーのはてなブックマーク (-)