チケット #16325

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

登録: 2009-04-22 22:27 最終更新: 2009-05-01 04:01

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
マイルストーン:
優先度:
5 - 中
重要度:
5 - 中
解決法:
直さない

詳細

※ 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の値に強制されます。

添付ファイルリスト

チケットの履歴 (4 件中 3 件表示)

2009-04-22 22:27 更新者: syachi
  • 新しいチケット "フォームヘルパでmaxlengthがActionFormのmaxの値に強制される" が作成されました
2009-04-22 22:31 更新者: syachi
  • 添付ファイル maxlength.Ethna_ViewClass.php.diff (File ID: 3692) が付加されました
2009-04-26 02:39 更新者: mumumu-org
  • マイルストーン(未割り当て) から 2.5.0p4 (完了済み) に更新されました
  • 担当者(未割り当て) から mumumu-org に更新されました
  • コンポーネント(未割り当て) から Ethna-Core に更新されました
2009-05-01 04:01 更新者: mumumu-org
  • チケット完了時刻2009-05-01 04:01 に更新されました
  • 状況オープン から 完了 に更新されました
  • 解決法なし から 直さない に更新されました
コメント

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 を一貫して指定しなさい」というルールの方が明解であると考えます。

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする