所以我有一個「簡單」的形式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]
= '雪人' site[domains][0][language]
= 'nl_NL'
它給出了網站的錯誤[名]說它必須至少200個字符,所以驗證「有效」 但它也應該給出site[domains][0][host]
上的錯誤,它需要至少200個字符(代碼被複制粘貼,並且使用是正確的)。
那麼,爲什麼不驗證踢,和或我怎麼能解決這個問題,使一元/場中的集合內設置相應有效
也許嘗試'zend-form-generator.123easywebsites.com'' – Patrioticcow
你不能添加一個字段集,據我所見 – MKroeders