1

如何根据bill_ceckpost 参数验证帐单地址?

我查看了帖子验证(http://symfony.com/legacy/doc/cookbook/1_2/en/conditional-validator),但在我看来,它像是 AND 验证而不是 OR。

class OrderAddForm extends BaseOprOrderHeaderForm {
  public function configure() {
    $this->setWidgets(array(
        'email' => new sfWidgetFormInputText(),
        'name' => new sfWidgetFormInputText(),
        //....
        'city' => new sfWidgetFormInputText(),
        'street' => new sfWidgetFormInputText(),
        //....
        'bill_check' => new sfWidgetFormInputCheckbox(),
        'bill_name' => new sfWidgetFormInputText(),
        'bill_city' => new sfWidgetFormInputText(),
        'bill_street' => new sfWidgetFormInputText(),
        //....
    ));
    $this->widgetSchema['bill_check']->setOption('value_attribute_value', 1);
    $this->setValidators(array(
        'email' => new sfValidatorEmail(),
        'name' => new sfValidatorString(),
        //...
        'city' => new sfValidatorString(),
        'street' => new sfValidatorString(),
        //...
        'bill_check' => new sfValidatorBoolean(),
    ));
    if (/** the most convetional solution to check 'bill_check' state */) {
      $this->validatorSchema['bill_name'] = new sfValidatorString();
      $this->validatorSchema['bill_city'] = new sfValidatorString();
      $this->validatorSchema['bill_street'] = new sfValidatorString();
      //....
    }
    $this->widgetSchema->setNameFormat('orderAddForm[%s]');
  }
}

谢谢,奥利弗

4

1 回答 1

2

你可以使用一个postValidator

public function configure() {
  // your current code
  $this->validatorSchema->setPostValidator(
    new sfValidatorCallback(array('callback' => array($this, 'checkOtherStuff')))
  );
}

public function checkOtherStuff($validator, $values)
{
  // $values is an array of POSTed values
  if ($values['bill_check'] == 'something in here')
  {
    if ($values['bill_city'] == '' || $values['bill_street'] == '') {
        throw new sfValidatorError($validator, 'You must complete all fields');
    }
  }
  // bill_check is correct, return the clean values
  return $values;
}

关于这个主题的博客文章在这里

于 2012-11-20T16:33:11.893 回答