Так у меня есть «простая» формапроверки элемента коллекция ZF2 формы
class SiteAddForm extends Form
{
public function __construct()
{
parent::__construct('add_site_form');
$site = new SiteFieldSet();
$this->add($site);
}
public function getTemplate()
{
return 'site_add.phtml';
}
}
формы это само ничего не делает. Он добавляет field_set и возвращает имя шаблона.
SiteFieldSet выглядит любит:
class SiteFieldSet
extends FieldSet
implements InputFilterProviderInterface
{
public function __construct()
{
parent::__construct('site');
$name = new Text('name');
$this->add($name);
$domains = new Collection('domains');
$domains->setTargetElement(new DomainFieldSet())
->setShouldCreateTemplate(true);
$this->add($domains);
}
public function getTemplate()
{
return 'site.phtml';
}
/**
* Should return an array specification compatible with
* {@link Zend\InputFilter\Factory::createInputFilter()}.
*
* @return array
*/
public function getInputFilterSpecification()
{
return [
'name' => [
'required' => true,
'validators' => [
new StringLength([
'min' => 200,
])
]
],
'domains' => [
'required' => true,
],
];
}
}
Он добавляет элемент текста и инкассовое полей. Набор полей реализует InputFilterProviderInterface
для проверки введенных данных.
Имя должно быть не менее 200 символов (для тестирования), и сбор требуется.
Но теперь наступает моя проблема. С набором полей, который выбрасывается в коллекцию, код:
class DomainFieldSet
extends FieldSet
implements InputFilterProviderInterface
{
public function __construct()
{
parent::__construct('domain');
$host = new Url('host');
$this->add($host);
$language = new Select('language', [
'value_options' => [
'nl_NL' => 'NL',
],
]);
$this->add($language);
$theme = new Select('theme', [
'value_options' => [
'yeti' => 'Yeti',
]
]);
$this->add($theme);
}
public function getTemplate()
{
return 'domain.phtml';
}
/**
* Should return an array specification compatible with
* {@link Zend\InputFilter\Factory::createInputFilter()}.
*
* @return array
*/
public function getInputFilterSpecification()
{
return [
'host' => [
'required' => true,
'validators' => [
new StringLength([
'min' => 200,
])
]
],
'language' => [
'required' => true,
],
'theme' => [
'required' => true,
],
];
}
}
Опять ничего особенного. В настоящее время три элемента определены хостом, тема & язык. Опять набор полей реализует InputFilterProviderInterface
. Таким образом, в классе должна быть функция getInputFilterSpecification.
Когда я заполнить форму site[name]
= "тест" site[domains][0][host]
= 'тест' site[domains][0][theme]
= 'Yeti' site[domains][0][language]
= 'nl_NL'
Это дает ошибку на сайте [имя] говорит это должно по крайней мере 200 символов, поэтому проверки «работают» Но также должно быть сообщение об ошибке site[domains][0][host]
, что оно должно быть как минимум 200 символов (код был скопирован и правильное использование).
Так почему же не проверка умирает, и или как я могу решить этот вопрос так элемент/поле устанавливается внутри коллекции должным образом подтвержден
может быть попробуйте 'zend-form-generator.123easywebsites.com' – Patrioticcow
Вы не можете добавить к нему набор полей, насколько я вижу – MKroeders