肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

Ethnaな私が今日から始めるrhaco

PHP界きっての変態フレームワークで有名なrhacoですが,本日からひょんなことがきっかけで触り始めました.*1
今注目されつつあるので,入門したいーという方の参考になれば幸いです.


そんなわけで,Lingrでtokushimaさんから直接チュートリアルされながらrhacoのおいしいところをちょくちょくつまみ食いしてきました.
で,本家のチュートリアルはtrunkでは動かないかもしれないとかなので,注意が必要とのことw

それと,rhacoな人がrhacoはコード補完がなきゃやってらんねぇと言ってたので,オススメに乗ってeclipseもついでに入れました.*2

その手順も載せておきます.

eclipse PDT all-in-one のインストール

上記URLから,Release Build→Winのall-in-oneをダウンロードし,適当なところに保存.Javaが動く環境がないとダメです.

subclipseをインストール

これは,Page not found · GitHub Pagesに書いてあるとおりです.

rhacoPHPプロジェクトとしてチェックアウト

rhacoのセットアップ部分がPage not found · GitHub Pagesとちょっと違うので,注意.

以下その手順.(svnリポジトリは登録済みとします)

trunkを右クリックして,チェックアウト


ウィザードを使って,PHPプロジェクトとしてチェックアウトする


プロジェクト名はrhacoにする

プロジェクトパスとか,PHP5にするとかそういうことは環境次第でちょいちょい違います.(私の場合は,VMのSamba上ですので\\Centos\\とかになってます)

すると,PHP Explorerにrhacoが現れます.これでOK.

ちなみにEclipse使わない人はどこか好きなところに,

% svn co https://rhaco.svn.sourceforge.net/svnroot/rhaco/trunk rhaco

とかしてください.

rhacoでプロジェクトを作る

まぁとりあえず,Page not found · GitHub Pagesのとおり,投票機能を作ることにする.

プロジェクト新規作成

projectをウィザードから作成→PHP→プロジェクト名にはpollとかで作成してください.

include pathにrhacoを追加

ここが重要.

pollプロジェクトを右クリックして,Configure Include Path

addをクリックして,rhacoにチェックをしてOK

setup.phpをpoll/にコピー

バッテン印がついてるのは,HTMLがなんかちょっとおかしかったからです.このチュートリアル中に修正されてコミットされましたww
画像は,ペースト後.

プロジェクトDIR(poll)/setup.phpにアクセス

まず,rhacoのパスを入力させられます.
その後,sendすると,以下のような素敵な画面に行くはず.(pollにapacheが書き込み権限を持ってないと,setupとかが生成されないので,ダメです.ご注意.)

標準アプリのインストール

poll実装する前に,標準装備されているsampleアプリであるRSS Readerをインストールしてみます.

instからアプリのインストール

setup画面の,instをクリックし,サンプルアプリケーションの,installをクリック.(もちろんapacheの書き込み権限が必要です)

sample.phpが生成される

sample.phpにアクセスし,URLを入力

フィードがとれる.

サンプルアプリの中を見てrhacoをちょっと知った気になる

sample.php

生成された,sample.phpは,以下のようになっています

<?php
include_once("__init__.php");
Rhaco::import("generic.Flow");
Rhaco::import("tag.feed.FeedParser");

$flow = new Flow();
$url = $flow->getVariable("url","http://www.rhaco.org");

$flow->setVariable("url",$url);
$flow->setVariable("items",FeedParser::getItem($url));
$flow->write("sample_template.html");
$flow = new Flow();

これが,テンプレートパーサとリクエスト処理をまかなうやつ.*3

$flow->setVariable("url",$url);

これが,テンプレートの変数にセットするやつ.Smartyならassignですね.

$flow->write("sample_template.html");

これが,出力です.Smartyのdisplay と同じ.

テンプレート

全部張ると長いので大事なトコだけ.

<rt:loop param="items" var="item">
	<div class="item">
		<a href="{$item.link}">{$item.title}</a>
		<div class="date">[{$item.getPubDate('Y/m/d')}]</div>
		<pre>
			{$f.xml2html($item.description)}
		</pre>
	</div>
</rt:loop>

rt: でrhacoのテンプレート構文が始まる.loopはsmartyのforeachと同じで,パラメータをうけとって,ループする.

{$f.xml2html($item.description)}

$fはrhaco予約語で,TemplateFormatterという.*4 *5 HTML表示用にうにゃうにゃするw

大体そんなところ

setup.phprhacoのパスをいれた段階で,__settings__.php というのが,生成されますが,これはリリース時には含めません.
これは環境に依存するセッティングファイルが書いてあるので,リリース時には,setup.phpを実行して,リリース先のサーバでセットアップしなおします.*6

さて

今日はここまで.

...あれ?poll実装してないぞ?w

*1:前からPHPの素敵な変な子にはゴリ押しされてたわけですが.キッカケって大事ですね!

*2:rhaco認定のドヘンタイは補完なしで書くそうです

*3:[http://www.lingr.com/room/rhaco/archives/2008/02/03#msg-25346882:title]

*4:[http://www.lingr.com/room/rhaco/archives/2008/02/03#msg-25347440:title]

*5:[http://d.hatena.ne.jp/riaf/20070907/1189169818:title]

*6:[http://www.lingr.com/room/rhaco/archives/2008/02/03#msg-25349440:title]