У меня есть форма, которая работала, пока я не добавил два раскрывающихся меню. С тех пор, по представлению формы я получаю ошибку:Disable Inarray Validator on Zend Form
haystack option is mandatory
Это мой ProjectForm.php
<?php
namespace Project\Form;
use Zend\Form\Form;
use Zend\Form\Element\Text;
use Zend\Form\Fieldset;
use Zend\Form\Element\Select;
use Zend\Form\Element\Checkbox;
use Zend\Form\Element\Date;
use Zend\Config\Factory;
use Zend\Form\Element\Button;
use Zend\Form\Element\Textarea;
use Zend\Validator\Callback;
use Zend\InputFilter\InputFilterProviderInterface;
use Zend\Form\Element\File;
class ProjectForm extends Form implements InputFilterProviderInterface {
const KEY_PROJECT_NAME = "project_name";
const KEY_PROJECT_DUE_DTTM = "project_due_dttm";
const KEY_PROJECT_DESCRIPTION = "project_description";
const KEY_PROJECT_CONFIG = "project_config";
const KEY_PROJECT_TYPES = "project_types";
const KEY_PROJECT_WORKFLOW_CONFIG = "project_workflow_config";
const KEY_PROJECT_WORKFLOW_TYPES = "project_workflow_types";
const KEY_PROJECT_FILE = "project_file";
const KEY_SAVE_BTN = "project_save_btn";
const KEY_CANCEL_BTN = "project_cancel_btn";
public function __construct($name = null, $options = array()) {
parent::__construct($name);
$this->setAttribute('method', 'post');
$this->setAttribute('class', 'form-horizontal');
$name = new Text(self::KEY_PROJECT_NAME);
$name->setAttribute("id", self::KEY_PROJECT_NAME);
$name->setLabel("Name");
$duedttm = new Text(self::KEY_PROJECT_DUE_DTTM);
$duedttm->setAttribute("id", self::KEY_PROJECT_DUE_DTTM);
$duedttm->setLabel("Due Date");
$description = new Textarea(self::KEY_PROJECT_DESCRIPTION);
$description->setAttribute("id", self::KEY_PROJECT_DESCRIPTION);
$description->setLabel("Description");
$config = new Textarea(self::KEY_PROJECT_CONFIG);
$config->setAttribute("id", self::KEY_PROJECT_CONFIG);
$config->setLabel("Configuration");
$projectTypeDropDown = new Select(self::KEY_PROJECT_TYPES);
$projectTypeDropDown->setLabel('Project Type:');
$projectTypeDropDown->setValueOptions($options["project"]);
$wfConfig = new Textarea(self::KEY_PROJECT_WORKFLOW_CONFIG);
$wfConfig->setAttribute("id", self::KEY_PROJECT_WORKFLOW_CONFIG);
$wfConfig->setLabel("Workflow Configuration");
$projectWorkflowDropDown = new Select(self::KEY_PROJECT_WORKFLOW_TYPES);
$projectWorkflowDropDown->setLabel('Workflow Type:');
$projectWorkflowDropDown->setValueOptions(array());
$file = new File(self::KEY_PROJECT_FILE);
$file->setAttribute("id", self::KEY_PROJECT_FILE);
$file->setAttribute("multiple", true);
$file->setLabel("File");
$save = new Button(self::KEY_SAVE_BTN);
$save->setAttributes(array("id", self::KEY_SAVE_BTN));
$save->setLabel("Save");
$save->setValue("Save");
$cancel = new Button(self::KEY_CANCEL_BTN);
$cancel->setAttributes(array("id", self::KEY_CANCEL_BTN));
$cancel->setLabel("Cancel");
$this->add($name);
$this->add($duedttm);
$this->add($description);
$this->add($config);
$this->add($projectTypeDropDown);
$this->add($wfConfig);
$this->add($projectWorkflowDropDown);
$this->add($file);
$this->add($save);
$this->add($cancel);
}
public function isValidJSON($value, $options) {
try {
JSON::decode($value);
return true;
} catch (JSONException $e) {
return false;
}
}
public function isValidDateTime($value, $options) {
if (false === date_create($value)) {
return false;
}
return true;
}
/**
* (non-PHPdoc)
* @see \Zend\InputFilter\InputFilterProviderInterface::getInputFilterSpecification()
*/
public function getInputFilterSpecification() {
return array(
ProjectForm::KEY_PROJECT_CONFIG => array(
'required' => true,
'filters' => array(
array(
'name' => 'Zend\Filter\StringTrim'
),
),
'validators' => array(
new Callback(
array(
$this,
'isValidJSON'
)),
),
),
ProjectForm::KEY_PROJECT_WORKFLOW_CONFIG => array(
'required' => false,
'filters' => array(
array(
'name' => 'Zend\Filter\StringTrim'
),
),
'validators' => array(
new Callback(
array(
$this,
'isValidJSON'
)),
),
),
ProjectForm::KEY_PROJECT_DUE_DTTM => array(
'required' => false,
'filters' => array(
array(
'name' => 'Zend\Filter\StringTrim'
),
),
'validators' => array(
new Callback(
array(
$this,
'isValidDateTime'
)),
),
),
);
}
}
Я думаю, что мне нужно отключить inarray_validator
, добавив disable_inarray_validator' => true
, но я не обязательно, где добавить это.
После попытки второго варианта я получаю 'Призыва к неопределенным метод Ze \ Form \ Элемент \ Select :: setDisableInArrayValidator() '. Я пропустил что-то, что нужно включить? –
Какова ваша версия Zend? Это странно, http://framework.zend.com/apidoc/2.4/classes/Zend.Form.Element.Select.html#method_setDisableInArrayValidator говорит, что этот метод является общедоступным. Вы попробовали вариант вместо этого? – JesusTheHun
Я использую Zend версии 2.1.0. И я попробовал другой вариант, но я получаю ту же ошибку haystack –