Проверка уже существующей записи базы данных в Zend с использованием валидатора
У меня есть зенд форма с элементом $recipe_name
следующим образом.. я хочу проверить, если _recipename
уже существует с использованием проверки (Zend_Validate_DbNoRecordExists).
$recipe_name= $this->createElement('text',$i.'_recipename',array('label'=> "Extra Item Name in ".$data['language'].'', 'class'=> 'inp-form',) );
$recipe_name->setDecorators(array( 'ViewHelper',
array(array('data'=>'HtmlTag'), array('tag' => 'td')),
array('Label', array('tag' => 'td','style')),
array(array('row'=>'HtmlTag'),array('tag'=>'tr','openOnly'=>true))));
$recipe_name->setRequired(true);
$recipe_name->addValidator('NotEmpty',true);
$recipe_name->getValidator('NotEmpty')->setMessage("Please enter Recipe section name in ".$data['language']);
Как я могу это сделать?
3 ответа
Решение
$clause = $db->quoteInto ( '<your column Name> ?', "<Your Value>" );
$validator = new Zend_Validate_Db_RecordExists ( array ('table' => '<Table Name>', 'field' => 'Field Name', 'exclude' => $clause ) );
if ($validator->isValid ( "<value to validate>" )) {
//..............
//.............
}
Для такого рода проверки вы должны добавить валидатор, подобный этому.
$recipe_name->addValidator(
'Db_NoRecordExists',
true,
array(
'table' => 'recipes',
'field' => 'recipe_name',
'messages' => array( "recordFound" => "Recipe Name already exist ... ! <br>") ,
)
);
Это проверит ваше имя, когда вы проверяете валидацию формы от isValid.
Да! Zend_Validate_Db_NoRecordExists
будет служить вашим потребностям. Вы должны сделать что-то вроде ниже:
$db_lookup_validator = new Zend_Validate_Db_NoRecordExists('<your table name>', '<column name>');
$your_field = new Zend_Form_Element_Text('<your form element name>'); // you already created an element, so you can skip this line.
$your_field->addValidator($db_lookup_validator);
Ура и счастливого кодирования!