【发布时间】:2016-05-19 22:24:02
【问题描述】:
现在我有一个将Dog 的实例添加到Owner 的表单。我想这样做,如果Dog 已经有所有者,则会弹出一个确认对话框。每次按下按钮时,我都会弹出确认信息,但不太确定如何向其中添加条件。
我的代码如下:
<div class="row-fluid">
<?php echo $this->form()->openTag($form); ?>
<div class="form-group ">
<?php echo ctrlGroup($this, AddDogForm::KEY_DOG_ID, !($this->uberAdmin)); ?>
<?php $addDog = $this->form->get(AddDogForm::KEY_ADD_BTN); ?>
<?php $addDog->setAttribute("class", "btn btn-info"); ?>
<?php $addDog->setAttribute('onclick', 'if (confirm("Are you sure?")) { document.form.submit(); } return false;'); ?>
<?php echo $this->formSubmit($addDog); ?>
</div>
<?php echo $this->form()->closeTag(); ?>
每次单击按钮时都会弹出一个弹出窗口,但我希望它在弹出弹出窗口之前检查输入的内容。
以下是我的AddDogForm:
class AddDogForm extends Form{
const KEY_PROJECT_ID = "project_id";
const KEY_ADD_BTN = "project_add_btn";
public function __construct($name = null, $options = array()){
parent::__construct($name);
$this->setAttribute('method', 'post');
$this->setAttribute('class', 'form-inline');
$id = new Text(self::KEY_DOG_ID);
$id->setAttribute("id", self::KEY_DOG_ID);
$id->setLabel("dogid to add");
$this->add($id);
$add = new Button(self::KEY_ADD_BTN);
$add->setAttributes(array("id", self::KEY_ADD_BTN));
$add->setLabel("Add Dog");
$add->setValue("Add Dog");
$this->add($add);
}
}
更新:我可以通过将其添加到 AddDogForm 来添加自定义验证器:
public function hasNoOwner($dogId) {
$drm = DogResourceModel::create();
$dogs = $drm->find($dogId);
$dog = array_values($dogs)[0];
if($dog->getOwnerId()){
return false;
} else {
return true;
}
}
public function getInputFilterSpecification() {
$hasOwnerValidator = array(
'required' => true,
'validators' => array(
new Callback(
array(
$this,
'hasNoOwner'
)),
),
);
return array(
self::KEY_PROJECT_ID => $hasOwnerValidator
);
}
这将阻止用户输入。我是否可以改为更改它以要求确认而不是阻止 POST 发生?
【问题讨论】:
标签: php forms validation zend-framework popup