2007-11-01

カボチャ最終日


カボチャ型カボチャ団子。
思ったより圧縮が激しくてかなり小さいものに。あと皮の部分があまり細かくできなくて中途半端な塊が残る状態になってしまったのが失敗。

週間といっときながらもう10月も終了なのでこれでおしまいです。カボチャもないし。

IE における Piece Framework のハマりボタン

ページの中に準備された1つのフォームから、例えばいくつかの別ページへ遷移したり、何らかの処理を実施するため複数ボタンを準備するようなケースがあるかと思いますが、

<button type="submit" name="{__eventNameKey}_next" value="次へ" />次へ</button>
<button type="submit" name="{__eventNameKey}_back" value="戻る" />戻る</button>

なんでもないこのコード、IE では正常に動作しません。

具体的には、「戻る」ボタンを押したにも関わらず、「次へ」ボタンを押したように振舞ってしまいます。これは、フォームへの Submit が実行されると、準備された2つのボタンともにリクエストパラメータとしてPOSTされてしまうためです。ボタンには Piece Framework を制御するためのイベント名が付与されていますが、2つのイベントリクエストが飛んできてしまうため、実行すべきイベントが正しく認識できなくなってしまうのです。

ボタンによるイベントの切り替えを Form への Submit で行う場合は、<button> タグではなく <input type="submit"> で対応するようにしましょう。

<input type="submit" name="{__eventNameKey}_next" value="次へ" />
<input type="submit" name="{__eventNameKey}_back" value="戻る" />

2007-10-31

カボチャ週間2


かぼちゃのひき肉あんかけ。微妙にあんかけのとろみが足りなかったのが残念。
なんか前日分と同じような料理なものの、カボチャ自体の味付けはこっちがアッサリ気味に。

2007-10-29

カボチャ週間

今週がハロウィンということでカボチャ週間です。
とはいっても別にパーティするわけでもなく、普通にカボチャをつかった料理を作るだけー。しかも和しか作らない。



ということで初っ端はひとまずオーソドックスに「なんきんのたいたん」で。関西ではカボチャ煮のことをこう呼びます。たいたん。

2007-10-26

Piece_Right で複数カラムのエラーメッセージを1つにまとめる


上記のような入力フォームで氏名の姓・名ともに入力値の必須バリデーションを行う場合、それぞれのリクエスト毎に必須確認およびエラーメッセージを設定すると、片方のみ未入力というケースならばよいものの、


両方ともに未入力の場合だと、上のような感じに。
これを回避しようとすると、テンプレート側で「どっちもエラーならば片方のみ表示して~」というような分岐文を書いてしまうところです。

ここは、次のようなバリデーションを行うようにします。

- name: lastName
  filter: &Japanese
    - trim
    - JapaneseH2Z
- name: firstName
  filter: *Japanese
- name: name
  required:
    message: 未入力です
  pseudo:
    format: %s%s
    arg:
      - lastName
     - firstName

これで、lastName, firstName のどちらかが未入力だった場合 name カラムもブランクとなり、required ルールにヒットしエラーとなります。あとはテンプレートにて name カラムについてのエラー処理を行えば OK です。もちろん、lastName, firstName の値もそのまま利用できます。

2007-10-19

ひじき


帰宅後にひじきを作る。細かくした豚とちくわを入れる。
こうやってタッパにいれておくことで2,3日は1品ものとして戦える。

Piece_Right による複数項目を使った WithMethod 実行と finals

前のエントリでさらっと使用していたりするのですが、Piece_Right のバリデーションルールの1つである WithMethod において複数のリクエストカラムを使った処理を実施したい場合は、WithMethod で指定したメソッドの第3引数として渡される Piece_Right_Results オブジェクトを利用します。

function checkPassword($password, $context, $results)
{
    // username リクエストの値を取得
    $username = $results->getFieldValue('username');
    ....
}

なおここで受け取れる値は、既にバリデーション済みの対象に限ります。すなわち、このメソッドが実行される WithMethod バリデーションが行われる前に、あらかじめ username に対してのバリデーションが済んでいる必要があります。


バリデーションは、通常はバリデーションルールの書かれた yaml ファイル内の順に実行されますので username カラムを一番に記述しておけば問題はないはずです。確実に最終バリデーションとして実行したい場合は、validator とは別に記述することのできる finals を利用することで、すべてのバリデータ実行の後に改めてバリデーションを行うことができます。

- name: username
  required:
    message: ユーザ名を入力ください
  filter: &AlphaNumeric
    - trim
    - JapaneseAlphaNumeric
  validator:
    - name: Length
      rule:
        min: 6
        max: 255

- name: password
  required:
    message: パスワードを入力ください
  filter: *AlphaNumeric
  validator:
    - name: Length
      rule:
        min: 6
        max: 255
  finals:
    - name: WithMethod
      rule:
        class: AuthenticationAction
        method: checkPassword
      message: 認証に失敗しました