如何在yii中组合场景

时间:2015-01-21 16:50:54

标签: validation yii scenarios

我的表单根据表单上的选择需要不同的方案。 例如:用户可以选择在商店中添加与帐单地址不同的递送地址(这很简单,实际上,我会有3或4种不同的情况)。

因此,在验证表单时,根据用户的选择,我需要结合两种方案(一种用于帐单地址,另一种用于交付地址)。

我如何将两种情景结合起来?

1 个答案:

答案 0 :(得分: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!');
      }
  }
}