フォームでの選択に基づいて、さまざまなシナリオを必要とするフォームがあります。例: ユーザーは、請求先住所とは異なる店舗の配送先住所を追加することを選択できます (これは簡単です。実際には、3 つまたは 4 つの異なるシナリオがあります)。
したがって、フォームを検証するときは、ユーザーの選択に応じて、2 つのシナリオ (請求先住所用と配送先住所用) を組み合わせる必要があります。
2 つのシナリオをどのように組み合わせますか?
フォームでの選択に基づいて、さまざまなシナリオを必要とするフォームがあります。例: ユーザーは、請求先住所とは異なる店舗の配送先住所を追加することを選択できます (これは簡単です。実際には、3 つまたは 4 つの異なるシナリオがあります)。
したがって、フォームを検証するときは、ユーザーの選択に応じて、2 つのシナリオ (請求先住所用と配送先住所用) を組み合わせる必要があります。
2 つのシナリオをどのように組み合わせますか?
ルール構成でシナリオをグループ化することはできません。代わりに、ルールのリストを 1 つずつ作成します。
一連のフィールドに複数のシナリオを適用できます。
例えば :
public function rules()
{
return array(
// For purchases, supply the delivery address
// For registration, supply the postal address
// For payment, supply the delivery address and postal address
array('delivery_address', 'required', 'on' => array('purchase', 'payment'),
array('postal_address', 'required', 'on' => array('register', 'payment'),
// :
);
}
「条件付き」シナリオを使用することはできません。条件付きルールを実装するには、カスタム検証の実装をご覧ください。
public function rules()
{
return array(
array('postal_address', 'validateAddresses'),
);
}
public function validateAddresses($attribute,$params) {
if (!$this->deliveryAddressSameAsPostal) {
if ((empty($this->delivery_address)) {
$this->addError($attribute, 'Please supply a delivery address!');
}
}
}