Buraya çekmek için en kolay yaklaşım tüm dizi PHP şekilde otomatik aşağıdaki gerçekleştirmek mümkün görmek gibi girdi unsurları ayrıştırma basit bir özel Zend Validator, kullanmaktır.
- Bağımsız olarak her giriş elemanı doğrulamak ve her öğe için ilişkili hata iletilerini görüntüler.
- Sadece sunuldu formunu yeniden bir ayrıştırma mümkün dizisi döndürür.
Zend_Validator için
class Validate_InputArray extends Zend_Validate_Abstract
{
const INVALID = 'invalid';
const ERROR = 'error';
/**
* Failed array elements used to regenerate same elements
* on next form build
*
*/
protected $_elements = array();
protected $_messageTemplates = array(
self::INVALID => "Could not locate post element %value%",
self::ERROR => "YOUR ERROR MESSAGE|%value% is required"
);
public function __construct()
{}
public function isValid($element)
{
if (!$_POST[$element]) {
$this->_error(self::INVALID);
return false;
}
$elements = array();
if (is_array($_POST[$element])) {
$fail = false;
foreach ($_POST[$element] as $k => $v) {
if (!$this->_validateElement($v)) {
$this->_error(self::ERROR);
$elements[$k] = self::ERROR;
}
}
$this->_setElements($elements);
if ($fail) {
return false;
}
} else {
if (!$this->_validateElement($_POST[$element])) {
$this->_error(self::ERROR);
$elements[0] = self::ERROR;
$this->_setElements($elements);
return false;
}
}
}
protected function _setElements($elements)
{
$this->_elements = $elements;
return $this;
}
public function getElements()
{
return $this->_elements;
}
private function _validateElement($value)
{
// do your validation here
// return true/false
}
}
Hemen bir değer olarak olası bir dizi ile giriş ayrıştırmak ve her öğe doğrulamak ve aynı keyfi alanları, sunulan tam formunu yeniden oluşturmak için bu kullanarak kodu.
$fail = false;
if ($this->getRequest()->isPost()) {
require 'Validate_InputArray.php';
$validator = new Validate_InputArray();
$elements = array();
if (!$validator->isValid($validator)) {
$fail = true;
foreach ($validator->getElements() as $k => $v) {
$elements[$k] = $v;
}
}
}
if ($fail) {
$messages = $validator->getMessages();
foreach ($elements as $k => $v) {
// Add custom methods here
$element = $form->createElement('text', 'elementName[]');
$element->addErrorMessages($messages[$k]);
}
} else {
$form->addElement('elementName[]');
}
Bu alt forma ihtiyaç duymadan gerektiği gibi keyfi giriş herhangi bir sayıda öğe doğrulamak, ya da form elemanları yeniden eklemek için ihtiyaç hakkında endişe izin verirseniz ve bir keyfi elemanı doğrulama başarısız olur ve istemci üzerinde yeniden inşa edilmesi gerektiğinde tarafı.