2007-02-17 (土)
■ Piece Framework のサンプルカウンタ
Piece Framework を試してみている。 Piece_Flow のアーカイブの中にあったテスト用のファイルを少し手直しして、 ごくごく簡単なサンプルを作ってみた。 カウンタというか、へぇボタンみたいなやつだ。 ただこのサンプルは、必ず同じ state に戻って来るという点があまりよろしくない。 そのせいで「戻る」ボタンを押した時の動作がおかしいが、 あくまでも練習ということで大目に見て欲しい。
- config/flows/Counter.yaml
firstState: DisplayForm
viewState:
- name: DisplayForm
view: Counter
activity:
method: setView
transition:
- event: increase
nextState: done
action:
class: CounterAction
method: increase
- event: reset
nextState: done
action:
class: CounterAction
method: reset
actionState:
- name: done
transition:
- event: succeed
nextState: DisplayForm
initial:
class: CounterAction
method: initialize
- actions/CounterAction.php
<?php
require_once 'Piece/Flow/Action.php';
class CounterAction extends Piece_Flow_Action
{
function initialize()
{
$this->_flow->setAttribute('counter', 1);
}
function increase()
{
$counter = $this->_flow->getAttribute('counter');
$this->_flow->setAttribute('counter', $counter + 1);
return 'succeed';
}
function reset()
{
$this->initialize();
return 'succeed';
}
function setView()
{
$counter = $this->_flow->getAttribute('counter');
$viewElement =& $this->_payload->getViewElement();
$viewElement->setElement('counter', $counter);
}
}
?>
- templates/Counter/Counter.html
<p>Counter: {counter}</p>
<form>
<input type="hidden" name="{__flowExecutionTicketKey}" value="{__flowExecutionTicket}" id="flowExecutionTicket" />
<input type="submit" name="{__eventNameKey}_increase" value="Increase" />
<input type="submit" name="{__eventNameKey}_reset" value="Reset" />
</form>
あとは piece-unity-config.yaml にこのフローを追加するといった作業も必要だが、 とりあえずこれはこれでちゃんと動作する。
さて、ここからが本題。 マニュアルに書かれているアクション継続の説明を読んで、 その時は、ふーん、と思っていたのだが、 しばらく経った後で、書かれていることの意味が頭に染み渡ってきた。 フロー変数を意識する必要が無いだって? もしかして、アクション継続の機能を有効にすればこういう風に書けるのか?
<?php
require_once 'Piece/Flow/Action.php';
class CounterAction extends Piece_Flow_Action
{
var $_counter;
function initialize()
{
$this->_counter = 1;
}
function increase()
{
$this->_counter++;
return 'succeed';
}
function reset()
{
$this->initialize();
return 'succeed';
}
function setView()
{
$viewElement =& $this->_payload->getViewElement();
$viewElement->setElement('counter', $this->_counter);
}
}
?>
試してみたところ、これでちゃんと動いた。こりゃすごいや。
要するに、今までの通常の Web アプリだったら、 セッションに値を保存しておいて、 次の画面でセッションから値を取り出して、 といったことをほぼ手作業でやっていたのに、 そういった処理を何も書かなくて済む。 Piece Framework はステートフル、と書かれていたのがようやく実感できた。
[コメントを書く]
本日のリンク元
- 2 google検索(Piece Framework)
- 2 google検索(setView piece)
- 2 google検索(php カウンタ サンプル)
- 2 http://www.google.co.jp/hws/search?q=Piece Framewo...
- 2 http://209.85.175.104/search?q=cache:tRsOtmC8gT0J:...
- 1 http://www.revulo.com/
- 1 google検索(piece-framework setelement form)
- 1 google検索(piece-framework サンプル)
- 1 google検索(piece php config)
- 1 google検索(piece-framework flow)
- 1 google検索(piece framework)
- 1 google検索(actionscript 3.0 カウンタ)
- 1 google検索(php zend framwork サンプル)
- 1 google検索(zend framework サンプル)
- 1 google検索(zend framework form)
- 1 google検索(zend framework すごい サンプル)
- 1 google検索(zend カウンター)
- 1 google検索(piece framework)
- 1 google検索(piece framework)
- 1 google検索(piece framework)
- 1 google検索(piece framework サンプル)
- 1 google検索(piece ステートフル)
- 1 google検索(php piece framework)
- 1 google検索(php クラス サンプル)
- 1 google検索(php カウンター submit)
- 1 google検索(javascript サンプル カウンター)
- 1 google検索(Piece Framework)
- 1 google検索(Piece Framework)
- 1 google検索(PHP サンプル function)
- 1 google検索(piece framework)
- 1 google検索(zend framework 1.0 サンプル)
- 1 google検索(setView Piece)
- 1 google検索(getAttribute piece)
- 1 google検索(function increase()
- 1 google検索(javascript reset サンプル)
- 1 google検索(ボタン カウント PHP)
- 1 google検索(php カウンタ サンプル)
- 1 google検索(戻るボタン PHP サンプル)
- 1 google検索(戻るボタン PHP サンプル)
- 1 google検索(Piece Framework サンプル)
- 1 google検索(javascript setAttribute setElement)
- 1 google検索(piece-flow framework)
- 1 google検索(Piece Flow Framework)
- 1 google検索(t)
- 1 http://www.google.co.jp/m/search?eosr=on&q=COUNTER...
- 1 msn検索(javascript setElement)
- 1 http://search.hatena.ne.jp/websearch?word=php piec...
- 1 http://74.125.153.132/search?q=cache:tRsOtmC8gT0J:...
- 1 http://72.14.235.132/search?q=cache:tRsOtmC8gT0J:w...
- 1 http://72.14.235.132/search?q=cache:tRsOtmC8gT0J:w...
- 1 http://72.14.235.104/search?q=cache:tRsOtmC8gT0J:w...
- 1 http://72.14.235.104/search?q=cache:tRsOtmC8gT0J:w...
- 1 http://72.14.235.104/search?q=cache:tRsOtmC8gT0J:w...
- 1 http://209.85.175.132/search?q=cache:tRsOtmC8gT0J:...
- 1 http://209.85.175.132/search?q=cache:tRsOtmC8gT0J:...
- 1 http://209.85.175.104/search?q=cache:tRsOtmC8gT0J:...
