rhaco0.93用の簡易チュートリアル

2006年10月31日(火) 03:23 この記事をクリップ!

Django勉強会 Disc1の打ち合わせ時に、phpのフレームワーク使うんならrhacoだよ、と言いまくってしまったので、簡単な使い方説明をします。

---- 2007/02/15 追記
現場の若いのが、Rhaco1.0.1用に書き直しました
---- 2007/02/15 追記ここまで


rhacoの利点等

    どうやらphpのフレームワークの場合、あまりO/R等はメジャーではないようです。
    → rhacoにはバリデータ込みのO/Rマッパーがあります。


    どうやらphpのフレームワークはPear等の別ライブラリが必要なことが多いようです。
    → rhacoは他のライブラリを必要としません(djangoみたい!)。mb_系は入っていると便利ですが。


    どうやらphpのフレームワークはTemplateのextendsができないようです。
    → rhacoはブロックという単位のincludeと、ブロックという単位のextendsに対応しています(extendsは0.93から)。


    どうやらphpのフレームワークは、phpであるにもかかわらずshellの利用が必要な場合があるようです。
    → rhacoはブラウザとテキストエディタがあれば開発できます(TrueStudio推奨)。



開発の進め方

    rhacoのページからダウンロードリンク(Quick Link → release)を辿って、rhacoの最新版をダウンロードします(sourceforge)。
    (その際、goesbyというサンプルアプリケーションもダウンロードすると、使い方のサンプルになります。goesbyはhttp://www.goesby.com/で動作しているソーシャルブックマークアプリケーションです)


    ダウンロードしたrhaco.zipを解凍し、rhacoディレクトリをapacheが読み込み可能な場所に配置します。
    Document rootより下に置く必要はありません(今回の例ではapacheの直下におきました)。

    Document rootの下にプロジェクト用のディレクトリを作成します(root直下で使いたい場合は不要)。


    rhacoディレクトリの直下にあるsetup.phpを、プロジェクト用のディレクトリの中にコピーします。
    setup.phpのコピー
    setup.phpのコピー posted from フォト蔵


    それでは、setup.phpを表示してみましょう。
    rhacoのpathを入力する用に要求されます。
    rhacoを配置したディレクトリを指定してください。
    rhacoのpathを設定する
    pathを設定する posted from フォト蔵


    「設定ボタン」をクリックすると、追加入力画面へ遷移します。
    テンプレートのキャッシュ等いろいろな設定がありますが、今回は一番したの囲み「アプリケーション」にある「サンプルアプリケーション」にだけチェックを入れて「生成する」ボタンをクリックしてください(権限がありませんというメッセージが表示されたら、apacheがプロジェクトディレクトリに書き込み可能な権限を付与してください)。
    サンプルアプリケーションにチェックを入れる
    サンプルアプリケーションにチェックを入れる posted from フォト蔵


    プロジェクトディレクトリの中身を見てください。setup.php以外にファイルやディレクトリが生成されているはずです。
    setupディレクトリの中には、project.xmlというファイルがあります。
    生成されたディレクトリ
    生成されたディレクトリ posted from フォト蔵
    このファイルにプロジェクトに関する内容を設定します。
    サンプルアプリケーションとして、index.phpというファイルができています。
    index.phpをブラウザで呼び出してみてください。入力フィールドが並んでいるはずです。
    値を入力してサブミットすると、同じ画面に戻ってくるというだけのものですが、入力した値を保持しているはずです(0.93はcheckboxとradioの動作がおかしい?)。
    これは、index.phpとresources/templates/index.htmlで動作しています。


    次に、setup/project.xmlをいじってみましょう。下記のように記述してください。(もし利用するデータベースにアプリケーションから接続するデータベースユーザを作成していない場合には作成しておいてください)

            <project rhacovar="0.9.3">
              <database name="test">
                <table name="bbs">
                  <column name="id" type="serial" />
                  <column name="name" type="string" size="20" require="true" />
                  <column name="comment" type="string" size="100" />
                </table>
              </database>
            </project>
          


    再びsetup.phpをブラウザで開いてください。今度は中間あたりにデータベースの設定が増えているはずです。
    データベースの設定
    データベースの設定 posted from フォト蔵
    利用するデータベースを選択し、データベース接続ユーザやパスワード等を埋め、テーブル作成にチェックを入れて「生成する」ボタンをクリックしてください(テーブル接頭語は一つのデータベースで複数のアプリケーションを動作可能とするための便利機能です)。


    library/dataディレクトリにたくさんのファイルができているはずです。O/Rで利用するクラス群です。
    O/Rのファイル群が生成される
    O/Rのファイル群が生成される posted from フォト蔵


    index.php/index.htmlをそれぞれ次のように修正してください。

    <?php
    require_once("./__init__.php");
    Rhaco::import("tag.HtmlParser");
    Rhaco::import("network.http.Request");
    Rhaco::import("database.data.Criteria");
    
    
    Rhaco::importLibrary("DbUtilTest.php");
    Rhaco::importLibrary("data.Bbs");
    
    
    $request 	= new Request();
    $htmlParser	= new HtmlParser();
    
    $dbUtil = DbUtilTest::instance();
    
    if($request->isPost()) {
      if(false == $dbUtil->insert($request->toObject(new Bbs()))) {
        $htmlParser->setVariable($request->getVariable());
      }
    }
    $object_list = $dbUtil->select(new Bbs(), new Criteria());
    
    $htmlParser->setVariable("object_list",$object_list);
    
    $htmlParser->write("index.html");
    
    ?>
          

    <html>
    <head>
    	<title>index</title>
    </head>
    <body>
    <form method="post">
    	name:<input type="text" name="name" reference="true" /><br />
    	comment:<textarea name="comment" reference="true"></textarea>
    	<input type="submit" value="submit" />
    </form>
    <ul>
    <rt:loop param="object_list" var="msg">
      <li>{$formatter.escape($msg.name)} :<br />
      {$formatter.escape($msg.comment)}</li>
    </rt:loop>
    </ul>
    </body>
    </html>
          


    では、index.phpを表示してみましょう。
    入力フォームがありますので、何も入力せずに「submit」ボタンをクリックしてみましょう。
    何もおきませんよね。では、comment欄にだけ文字を入力して「submit」ボタンをクリックしてみましょう。入力がのこったまま元に戻ってきましたよね?
    これは、project.xmlに設定したrequired="true"が効いているため、バリデータに止められてもとのページに戻ってきたのです。本来であれば、各入力フォーム毎にエラーメッセージの表示を行うのですが、やり方を忘れてしまったのではしょりました:)
    では、nameとcommentに値を入力して「submit」ボタンをクリックしてください。メッセージが表示されましたね?操作を繰り返すとどんどん増えていきます。
    complete
    complete posted from フォト蔵
    今回はページング等の実装はしませんでしたが、countやoffset、limit、も容易に扱えるので(SQL文はたいていの場合書く必要はありません。unionまでO/Rで扱えますよ)、goesbyのソースを眺めたり、rhac-jaメーリングリストに質問をしたりしてrhacoを楽しんでみてください。


 
ponybadge

Powered by

Feedbacks

Tweets

Tags

Calendar