アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » シンプル&パワフルなPHPライブラリ rhacoを使ってみよう! » 第6回 クールなURLを実現する Urls

シンプル&パワフルなPHPライブラリ rhacoを使ってみよう!

第6回 クールなURLを実現する Urls

前回解説したViewsをつかうと,簡単なアプリケーションの作成ならばメソッド一つで実現できるようになりました。

今回は,ViewsとUrlsを組み合わせて,URLを自在に設計してみます。また,まとめとして今まで開発してきたすべてのソースのリポジトリを作成してみました。

Urlsとは

CakePHPなど,最近のフレームワークでは標準で搭載されている「Cool URI」と呼ばれるようなURI設計を可能にするライブラリです。

正規表現を使って,自由自在にURLの設計ができるようになります。

Urlsをつかう

使い方は非常に簡単です。Urlsクラスのparserメソッドに,URLマッピングの配列を引数として渡すと,UrlsがURLを解析して該当するアクションを実行し,HtmlParserのインスタンスを返却します。

使用例

ここでは,TodoモデルのCRUDを実現する簡単な定義を紹介します。

index.php

<?php
require_once '__init__.php';
Rhaco::import('generic.Urls');
Rhaco::import('model.Todo');

$patterns = array(
    // リスト
    '^$' => array(
        'class' => 'generic.Views',
        'method' => 'read',
        'args' => array(new Todo(), new C(Q::eq(Todo::columnClose(), false))),
        'template' => 'list.html',
    ),
    // generic.Views を使用する場合は,設定を省略できます。
    '^detail/(\d+)$' => array('method' => 'detail', 'args' => array(new Todo(), new C(Q::fact()))),
    '^create$' => array('method' => 'create', 'args' => array(new Todo(), null, Rhaco::url())),
    '^update/(\d+)$' => array('method' => 'update', 'args' => array(new Todo(), null, Rhaco::url())),
    '^delete/(\d+)$' => array('method' => 'delete', 'args' => array(new Todo(), null, Rhaco::url())),
);
$parser = Urls::parser($patterns);
$parser->write();

Urlsで指定できる値は次の通りです。

意味
class実行するメソッドを持つクラス
method実行するメソッド名
argsメソッドに渡す引数
templateテンプレート名
var追加でテンプレートにセットする値

この状態でindex.phpにアクセスすると,PATH_INFOに何もセットされていないので一番最初に定義した‘^$’の部分にマッチし,一覧画面が表示されます。

つぎに,Apacheの場合はmod_rewriteの設定を行います。mod_rewriteに関しては,rhacoのセットアップにて設定を自動で書き出すことができます。

setup/project.xmlの最初の行を次のように書き換えます。

変更前

<project rhacover="1.6.1" version="0.0.1" name="kaeru" ...

変更後

<project rhacover="1.6.1" version="0.0.1" name="kaeru" pathinfo="index.php" ...

変更後,setup.phpにアクセスすると初期処理を実行するボタンが出現します。

画像

このボタンをクリックすると,アプリケーションのルートパス上にmod_rewriteの設定が記述された以下のような.htaccessが出力されます。

.htaccess

RewriteEngine On
RewriteBase /kaeru/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?%{QUERY_STRING}&pathinfo=$1 [L]

完了ボタンを作成する

作成したTODOを完了するためには,本来であれば専用のクラスとメソッドを作ってアクションを実現することになりますが,ここでは少し工夫してUrls+Viewsの機能だけで完了のアクションを作成してみます。

先に述べたUrlsの指定にupdateの項目が既にあるので,強引ですがテンプレートの変更で対応します。

resources/templates/list.html(変更点のみ)

  <table id="todo" rt:param="object_list" rt:var="object">
    <tbody>
      <tr class="even">
        <td>{$object.factCategory.toString()}</td>
        <td><a href="{$rhaco.url('detail')}/{$object.id}">{$object.subject}</a></td>
        <td>{$f.text2html($object.description)}</td>
        <td>{$object.captionPriority()}</td>
        <form action="{$rhaco.url('update')}/{$object.id}" method="post">
          <td>
            <input type="hidden" name="category" value="{$object.category}" />
            <input type="hidden" name="subject" value="{$object.subject}" />
            <input type="hidden" name="description" value="{$object.description}" />
            <input type="hidden" name="priority" value="{$object.priority}" />
            <input type="hidden" name="close" value="1" />
            <input type="submit" value="完了" />
          </td>
        </form>
      </tr>
    </tbody>

このように,http://localhost/kaeru/update に対して,closeフラグを強制的に1(true)にしてカラムを更新させると,一覧に表示されないようになります。

著者プロフィール

佐藤佳祐(さとうけいすけ)

北海道の大学に在籍し,現在は絶賛就職活動中。nequalに所属し,PEARリポジトリサービス「Openpear」開発を担当。最近はrhaco2と格闘する日々。お仕事の話,待ってます。

URLhttp://riaf.jp/

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス