私はすべてのリリースがリストされているプロモーション作成フォームにプロモーションを作成するユーザー向けに複数のミュージック・リリースを用意しています。ここでは、私はプロモーションフォームのモデルでいくつかの入力のすべてのルールを定義します。yii2で動的に生成されるチェックボックスのルールを定義します
フォームを保存するときに少なくとも1つのリリースがユーザーによって選択されているが、チェックボックスが動的に作成されているために機能していないかどうかを確認したい。
モデルで、そのフィールドのための私のフォームコード
foreach ($releaseInfo as $releases) {
if (!is_null($releases->releaseSongs)) {
echo "<fieldset><legend>". \yii\helpers\Html::activeCheckbox($model,'selected_releases[]',['id'=>'release_'.$releases->id,'onclick'=>'$("#songs_'.$releases->id.'").toggle()','label'=>false])." ".$releases->name."</legend>";
foreach ($releases->releaseSongs as $k => $v) {
echo "<div id='songs_".$releases->id."' style='display:none'>";
echo "<div>";
echo $v->song->name
echo "</div>";
echo "</div>";
}
}
}
echo "</fieldset>";
私のルール
['selected_releases','required','on'=>['catalog','catalog_update'],'requiredValue'=>1,
'when'=>function($model){return ($model->scenario == self::SCENARIO_CATALOG_BASED || $model->scenario == self::SCENARIO_CATALOG_BASED_UPDATE);},
'whenClient'=>'function(attribute,value){return ("'.$this->scenario.'"=="'.self::SCENARIO_CATALOG_BASED.'" || "'.$this->scenario.'"=="'.self::SCENARIO_CATALOG_BASED_UPDATE.'")}',
'message'=>'You must select atleast one release'
],
私は自分のフォームを送信する際掲載入力変数は、この
[selected_releases] => Array
(
[0] => 0
[1] => 0
)
requiredValue
でのように見えますselected_releases
が値の配列であるため、ルールは機能しませんいつも言っている私はそれが
OR
iはカスタム検証メソッドを作成しなければならないのチェックボックスの少なくとも1つslectionをチェックするような方法でルールのrequiredValue
パラメータオプションを使用する方法shoule
You must select atleast one release
私は少し混乱しています。だから、それはクライアント側だけではなく、全体的にしか機能しませんか? –
フィールドに必要な値が1に設定されているため、フィールド名として 'selected_fields []'と定義されているため、ユーザーは自分のプロモーション用に選択できる複数のリリースが存在する可能性がありますフィールド 'selected_releases'にはポストの値の配列が設定されています。バリデーターは値が1である必要があるため、常に少なくとも1つのリリースを選択する必要があります。現在はバリデーターのカスタム関数を使用しています。 –
私は本当にそれに感謝しています、私はカスタムバリデーションメソッドを使ってそれを行いました。 –