Piece_Rightのwatcher指定について

8 views
Skip to first unread message

わたなべ

unread,
Mar 3, 2007, 12:01:43 PM3/3/07
to Piece Framework Users (ja)
こんにちは、渡辺です。

二つのパラメータがあって、片方がNULLの場合もう片方を必須にしたいと考え、http://piece-framework.com/
2007/03/post_23.htmlを参考にして次のようなyamlを書きました。

- name: doc_id
description: ドキュメントID
watcher:
target:
- name: kwd
trigger:
comparisonOperator: ==
comparisonTo: null
turnOn:
turnOff:
required:
message: %_description%を指定してください

- name: kwd
description: キーワード
watcher:
target:
- name: doc_id
trigger:
comparisonOperator: ==
comparisonTo: null
turnOn:
turnOff:
required:
message: %_description%を指定してください

一方がnull、もう一方がnull以外の場合でもvalidateの結果がfalseになります。
watcherの指定が間違っているのかとも思うのですが、どこが悪いのか良くわかりません。

どちらか一つが必須というバリデーションの書き方をご存知の方がいらっしゃいましたらお教えください。

よろしくお願いします。

わたなべ

unread,
Mar 4, 2007, 3:08:30 AM3/4/07
to Piece Framework Users (ja)
自己レスです。

色々試してみたのですが、watcherではrequiredの制御が出来ない?ようなので、以下のように変更しました。

- name: doc_id
description: ドキュメントID

- name: kwd


description: キーワード
watcher:
target:
- name: doc_id
trigger:
comparisonOperator: ==

comparisonTo: NULL
turnOn:
turnOff:
validator:
- name: List
rule:
elements: [on]
message: %_description%がありません

わたなべ

unread,
Mar 4, 2007, 3:29:21 AM3/4/07
to Piece Framework Users (ja)
さらに自己レスです。

前回の設定でOKと思ったのですが、
以下の設定でkwdがNULLのとき、Listバリデータでfalseが返りません。
残念。

> - name: kwd
> description: キーワード

KUBO Atsuhiro

unread,
Mar 7, 2007, 11:08:27 PM3/7/07
to piece-framew...@googlegroups.com
久保です。

この件、「二つのフィールドのうちいずれか一つを必須にする」として、
HOWTO ドキュメントを作成しておきました。

http://trac.piece-framework.com/piece-right/wiki/HOWTO/%E4%BA%8C%E3%81%A4%E3%81%AE%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E3%81%86%E3%81%A1%E3%81%84%E3%81%9A%E3%82%8C%E3%81%8B%E4%B8%80%E3%81%A4%E3%82%92%E5%BF%85%E9%A0%88%E3%81%AB%E3%81%99%E3%82%8B

--
KUBO Atsuhiro e-mail: itema...@yahoo.co.jp

revulo

unread,
Apr 25, 2007, 10:27:44 AM4/25/07
to piece-framew...@googlegroups.com
revulo と申します。
関連する話題だと思うので、便乗して質問させてもらいます。

「人数制限をする」というチェックボックスにチェックを入れた時だけ、
「人数」というテキストボックスへの数字の入力を必須にしたいと思い、
以下のようなバリデーションファイルを書いてみました。

- name: limited
description: 人数制限をする

- name: maxuser
description: 人数
watcher:
target:
- name: limited
trigger:
comparisonOperator: ==
comparisonTo: 1
turnOn:
- maxuser
required:
message: %_description%を入力して下さい
enabled: false
validator:
- name: Range
rule:
min: 1
message: 正しい人数を入力して下さい

一応、これでほぼ希望通りの動作をしてくれるのですが、
チェックを外した状態でテキストボックスに -1 のように入力した場合も、
「正しい人数を~」というエラーメッセージが出てしまいます。

できれば、watcher の条件が満たされるまで validator の判定も行われない
ようにしたいのですが、どのようにすれば良いのでしょうか?

よろしくお願い致します。

わたなべ

unread,
Apr 26, 2007, 9:21:54 AM4/26/07
to Piece Framework Users (ja)
revuloさんこんばんは、わたなべ@紅い眼鏡 です。

手元では試してないのですが、
このようにすれば


> watcher:
> target:
> - name: limited
> trigger:

> comparisonOperator: !=
> comparisonTo: 1
> turnOff:
> - maxuser
ご期待通りの動きになりませんでしょうか?

あるいは、チェックが入っていないときにlimitedフィールド自体が無い場合は、
comparisonTo: を NULL にすればいいのではないかと思います。


わたなべ

unread,
Apr 26, 2007, 9:25:14 AM4/26/07
to Piece Framework Users (ja)

revulo

unread,
Apr 26, 2007, 10:45:37 AM4/26/07
to piece-framew...@googlegroups.com
revulo です。
わたなべさん、どうもありがとうございます。

期待しつつ試してみたのですが、残念ながら結果は変わらないようです。

ただ、少し不思議なのは、turnOn: でなく turnOff: を使うようにすると、
不正な人数を入力した時に、チェックボックスの部分でもエラーが出ます。

Zend Framework から Piece_Right を呼び出すという使い方をしているので、
その辺で私が何かミスをしている可能性もありますが。

わたなべ

unread,
Apr 27, 2007, 1:20:36 AM4/27/07
to Piece Framework Users (ja)
こんにちは、渡辺@紅い眼鏡 です。

手元のPiece-Unity 0.10.0 と Piece-Right 1.4.0で試してみました。
サンプルのレジストレーションフローに、limitedとmaxuserのフィールドを追加しました。

どうもturnOn/turnOffで制御できるのは、requiredだけのようです。

ルールからrequiredを削り、limited != 1 の時に turnOffする指定(下記)にしても、limitedがNULLの場合に
maxuserに-1を入力するとバリデーションエラーになりました。

- name: maxuser
description: 人数

watcher:
target:
- name: limited
trigger:
comparisonOperator: !=
comparisonTo: 1
turnOff:
- maxuser

validator:
- name: Range
rule:
min: 1
message: 正しい人数を入力して下さい


PieceRightのマニュアルでwatcherの使用例を見ると、validatorのオン/オフもできるように読めるのですが、仕様が変わったの
かもしれません。
http://trac.piece-framework.com/piece-doc/wiki/users/piece-right/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%BA%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB/%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%AE%9A%E7%BE%A9%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB

私があと思いつくのは、validatorにWithMethodを指定して、自分でチェックをしてやることぐらいです。
お役に立てず申し訳ありません。

revulo

unread,
Apr 27, 2007, 11:38:26 AM4/27/07
to piece-framew...@googlegroups.com
revulo です。
渡辺さん、お手数をおかけしてしまったようで、どうもすみません。

> どうもturnOn/turnOffで制御できるのは、requiredだけのようです。

確かに現状では、そういう動作になっているように見えます。
マニュアルの表記とは少し食い違っているような気がしますが。


> 私があと思いつくのは、validatorにWithMethodを指定して、自分でチェック
をしてやることぐらいです。

自前のメソッドで、required のチェックと数字のチェックをまとめてやる
ということですか? なるほど、確かにそうすればできるかもしれません。
他に手段がなければ試してみようと思います。

KUBO Atsuhiro

unread,
Jun 21, 2007, 7:21:51 AM6/21/07
to piece-framew...@googlegroups.com
revulo さん

久保です。

Piece_Right の仕様では、フィールドの設定がどんなものであれ、実際に値が
入ってきたときはバリデーションが実行されることになります。

ですので、

> できれば、watcher の条件が満たされるまで validator の判定も行われない
> ようにしたいのですが、どのようにすれば良いのでしょうか?

という使い方はできませんので、watcher を使わずにカスタムバリデータで対
応する必要があります。

--
KUBO Atsuhiro e-mail: ku...@iteman.jp

revulo

unread,
Jun 21, 2007, 8:09:40 AM6/21/07
to Piece Framework Users (ja)
revulo です。

> Piece_Right の仕様では、フィールドの設定がどんなものであれ、実際に値が
> 入ってきたときはバリデーションが実行されることになります。
>
> ですので、
>
> > できれば、watcher の条件が満たされるまで validator の判定も行われない
> > ようにしたいのですが、どのようにすれば良いのでしょうか?
>
> という使い方はできませんので、watcher を使わずにカスタムバリデータで対
> 応する必要があります。

なるほど、そういう仕様なのですね。

そのうちに、カスタムバリデータを作って真面目に対処してみるかもしれませんが、
とりあえずは、JavaScript でそのフィールドを隠したりして対処しようと思います。

どうもありがとうございました。

Reply all
Reply to author
Forward
0 new messages