0

私のデータベースには、タイプの生年月日 ( dob) フィールドがありdateます。テーブルからモデルを作成すると、私と同じように 1 つの属性が作成さdobれます。

したがって、モデルからフォームを生成すると、ユーザーの生年月日を収集できるフィールドが 1 つあります。私がしたいのは、日月と年にそれぞれ 3 つのドロップダウン要素を持つことです。次に、フォームを送信すると、それらはすべて一緒にまとめられdd-mm-yyyy、モデル属性 " dob"に取り込まれます。

この時点でYii、モデルがビューに渡されるため、フォームを使用してそれを行う方法がわかりません。これを達成する方法を見つけるにはどうすればよいですか。要約すると、

User-テーブルにdobasdateタイプのフィールドを 1 つだけ配置したい -Yii生成されたフォームに 3 つのドロップダウンを配置して、送信時にフォームを作成dobし、$model->user_dob

4

1 に答える 1

2

それは本当に奇妙です... 私は今日似たようなことをしました。人々は日付ピッカーを正しく使用していないことがわかったので、ドロップダウンを使用することを好みます。

モデルで月、日、年の仮想フィールドを宣言し、検証ルールを追加してから、それぞれのドロップダウンを作成します。

ドロップダウン リストの作成例:

echo CHtml::activeDropDownList($model, 'month', $monthsArray);
echo CHtml::activeDropDownList($model, 'day', $daysArray);
echo CHtml::activeDropDownList($model, 'year', $yearsArray);

オプションとして指定する月、日、年を配列に入力する必要があります。これはあなたの質問の範囲外のようですが、念のため、最後にそれを行うための関数の例を含めます。

次に、フォームコントローラーで、次のことを行います。

$model->attributes = $_POST['User'];

これらの値は、$model->month、$model->day、および $model->year に追加する必要があります。

次に、次のように日付形式でフォーマットするだけです。

$model->dob = $model->year . '-' . $model->month . '-' . $model->day;

モデルを保存します。

--- おまけ: 月、日、年の配列の例 --- これらは実際には最善の方法ではありませんが、私の目的では問題なく動作しました。

    public function getMonthsArray()
    {
        for($monthNum = 1; $monthNum <= 12; $monthNum++){
            $months[$monthNum] = date('F', mktime(0, 0, 0, $monthNum, 1));
        }

        return array(0 => 'Month:') + $months;
    }

    public function getDaysArray()
    {
        for($dayNum = 1; $dayNum <= 31; $dayNum++){
            $days[$dayNum] = $dayNum;
        }

        return array(0 => 'Day:') + $days;
    }

    public function getYearsArray()
    {
        $thisYear = date('Y', time());

        for($yearNum = $thisYear; $yearNum >= 1920; $yearNum--){
            $years[$yearNum] = $yearNum;
        }

        return array(0 => 'Year:') + $years;
    }
于 2013-01-07T18:37:31.380 に答える