1

ケーキ2.2.4

データベースsport_yearフィールドをYEARデータ型に設定しています。追加/編集ビューの年メニューを作成するために2つのアプローチを試しましたが、どちらにも独自の問題があります。

使用$this->Form->input

echo $this->Form->input('sport_year', array(
    'type' => 'date',
    'dateFormat' => 'Y',
    'name' => 'data[Sport][sport_year]',
    'minYear' => date('Y') - 2,
    'maxYear' => date('Y') + 1,
    'label' => 'Year',
    'empty' => '- select -'
));

コードは(検証と同様に)データを追加または編集するために正常に機能しますが、編集ページに到達したときに、既存の年のデータがフォームで適切に選択されていません。データ配列は表示[sport_year] => 2012されますが、メニューで2012が選択されていません。

echo $this->Form->year(
    'sport_year', 
    date('Y') - 2, 
    date('Y') + 1, 
    array(
        'name' => 'data[Sport][sport_year]', 
        'label' => 'Year', 
        'empty' => '- select -'
    )
);

イヤーヘルパーは既存のデータを正しく取得して選択しているようですが、ラベルが機能せず、モデルに検証が設定されていても、必要に応じてフィールドが正しくレンダリングされません。それでもデータは必要ですが、モデルのカスタムメッセージを無視し、コントローラーの保存エラーメッセージにフォールバックします。

4

2 に答える 2

1

$this->Form->year()ラベルは表示されません。$this->Form->input()ラッパーメソッドでありyear()、年フィールドを作成するためのものであるため、ラベルのみを追加します。

ケーキのコードは次のようなものです。

public function input() {
    echo '<div>';
    echo $this->label(...);
    echo $this->year(...);
    echo '</div>';
}

このコードを取るとname、ケーキがすでにそれを生成しているので、あなたは必要ありません。モデルに含まれていない場合は、Sport次を使用できますinput('Sport.sport_year', ...)

defaultドキュメントを読むと、入力のオプションがあることがわかります。それを使用するか、$this->request->data['Sport']['sport_year']希望する年に設定されていることを確認してください。

オプションを設定することもできvalueます。

echo $this->Form->input('sport_year', array(
    'type' => 'date',
    'dateFormat' => 'Y',
    'minYear' => date('Y') - 2,
    'maxYear' => date('Y') + 1,
    'label' => 'Year',
    'empty' => '- select -',
    'default' => date('Y')
));

また

echo $this->Form->input('sport_year', array(
    'type' => 'date',
    'dateFormat' => 'Y',
    'minYear' => date('Y') - 2,
    'maxYear' => date('Y') + 1,
    'label' => 'Year',
    'empty' => '- select -',
    'value' => date('Y')
));
于 2012-12-30T22:55:16.607 に答える
0

オプション1の場合、これを行います。

echo $this->Form->input('sport_year', array(
    ...
    'selected' => 'data[Sport][sport_year]'
));
于 2014-07-28T17:33:18.853 に答える