Ticket #16325

フォームヘルパでmaxlengthがActionFormのmaxの値に強制される

Open Date: 2009-04-22 22:27 Last Update: 2009-05-01 04:01

Reporter:
Owner:
Type:
Status:
Closed
Component:
MileStone:
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Won't Fix
File:
1

Details

※ preview3で確認しました

1.下記をActionFormに定義

    var $form = array(
        'string' => array(
            'type'      => VAR_TYPE_STRING,
            'form_type' => FROM_TYPE_TEXT,
            'name'      => 'string',
            'max'       => '9',
        ),
        'float' => array(
            'type'      => VAR_TYPE_FLOAT,
            'form_type' => FROM_TYPE_TEXT,
            'name'      => 'float',
            'max'       => '10.999',
        ),
        'int' => array(
            'type'      => VAR_TYPE_INT,
            'form_type' => FROM_TYPE_TEXT,
            'name'      => 'int',
            'max'       => '-1',
        ),
        'datetime' => array(
            'type'      => VAR_TYPE_DATETIME,
            'form_type' => FROM_TYPE_TEXT,
            'name'      => 'datetime',
            'max'       => '+1 day',
        ),
    );
2.templateに下記を指定
{form_input name="string" maxlength="10"}
{form_input name="float" maxlength="10"}
{form_input name="int" maxlength="10"}
{form_input name="datetime" maxlength="10"}
3.出力結果
<input maxlength="9" type="text" name="string" value="" />
<input maxlength="10.999" type="text" name="float" value="" />
<input maxlength="-1" type="text" name="int" value="" />
<input maxlength="+1 day" type="text" name="datetime" value="" />

上記の様にmaxlengthの値がActionFormで指定したmaxの値に強制されます。

Ticket History (3/4 Histories)

2009-04-22 22:27 Updated by: syachi
  • New Ticket "フォームヘルパでmaxlengthがActionFormのmaxの値に強制される" created
2009-04-26 02:39 Updated by: mumumu-org
  • Milestone Update from (None) to 2.5.0p4 (closed)
  • Component Update from (None) to Ethna-Core
  • Owner Update from (None) to mumumu-org
2009-05-01 04:01 Updated by: mumumu-org
  • Ticket Close date is changed to 2009-05-01 04:01
  • Status Update from Open to Closed
  • Resolution Update from None to Won't Fix
Comment

patch を拝見させて頂き、いろいろと思考した結果、 フォーム定義のmaxとフォームヘルパの maxlength 連携の機能は外すことにしました。よって、patch は採用せず、maxlength のコードを外すことでこのチケットはクローズにしたいと思います。

理由は以下の通り、サポートするにはルールが複雑で、ユーザにとって直感的でないと考えるからです。

1. VAR_TYPE_INT, VAR_TYPE_FLOAT の場合は、max と min の双方を指定しないと文字列長が厳密には決まりません。この場合のみに限って maxlengthをサポートしてユーザは嬉しいのか? という考慮があります。

2. VAR_TYPE_STRING の場合は、クライアントエンコーディングが EUC_JP であった場合や、全角半角の区別があるエンコーディングである場合に文字列長が推測できない場合があります。(ユーザーが半角、全角の入力のどちらを想定するかわからないため)

具体的には、クライアントエンコーディングが EUC_JP や Shift_JIS でない場合、かつ、 max または str[max|min]を使用していた場合にのみ、VAR_TYPE_STRING での maxlength サポートは意味があることになります。 

頂いた patch 自体は非常によく考えられて書かれていると思いますし、頂いたアイディアそのものも優れていると思います。しかし実際に使うユーザ側のことを考えると、上記のようなルールが必要になる機能を頑張ってサポートしてもおそらくユーザーを不必要に驚かせるだけではないかと思います。そうであるなら、「テンプレート側で maxlength を一貫して指定しなさい」というルールの方が明解であると考えます。

Attachment File List

Edit

Please login to add comment to this ticket » Login