Ну, я загружаю контент из editAction в edit.phtml с помощью ViewScript из zend_form, но когда пользователь нажимает кнопку «Сохранить» без изменения какого-либо контента, строка $ form-> isValid () возврат всегда null.
Посмотрите все мой код:
CadastroRegiao.php (этот код сборки все компоненты edit.pthml страницы)
<?php
класс Cadastros_Form_CadastroRegiao расширяет Zend_Form {
public function init() {
//Captura o View atual para trabalharmos com seus métodos
$view = Zend_Layout::getMvcInstance()->getView();
$front_controller = Zend_Controller_Front::getInstance();
//Array para removeção de acentos
$caracterComAcento = array("/á/", "/à/", "/â/", "/ã/", "/ä/", "/é/", "/è/", "/ê/", "/ë/", "/í/", "/ì/", "/î/", "/ï/", "/ó/", "/ò/", "/ô/", "/õ/", "/ö/", "/ú/", "/ù/", "/û/", "/ü/", "/ç/"
, "/Á/", "/À/", "/Â/", "/Ã/", "/Ä/", "/É/", "/È/", "/Ê/", "/Ë/", "/Í/", "/Ì/", "/Î/", "/Ï/", "/Ó/", "/Ò/", "/Ô/", "/Õ/", "/Ö/", "/Ú/", "/Ù/", "/Û/", "/Ü/", "/Ç/");
$caracterSemAcento = array("a", "a", "a", "a", "a", "e", "e", "e", "e", "i", "i", "i", "i", "o", "o", "o", "o", "o", "u", "u", "u", "u", "c"
, "A", "A", "A", "A", "A", "E", "E", "E", "E", "I", "I", "I", "I", "O", "O", "O", "O", "O", "U", "U", "U", "U", "C");
$filterPregReplace = new Zend_Filter_PregReplace();
//Configuração e Inicialização do Componentes
$cod_regiao = new Zend_Form_Element_Hidden('cod_regiao');
$cod_regiao->setName('cod_regiao');
$nome = new Zend_Form_Element_Text('nome');
$nome->setLabel('Nome*: ')
->setRequired(true)
->addFilter($filterPregReplace->setMatchPattern($caracterComAcento)->setReplacement($caracterSemAcento))
->addFilters(array('StripTags', 'StringTrim', 'StringToUpper'))
->addFilter(new Zend_Filter_Alnum(true))
->addFilter(new Zend_Filter_Null(Zend_Filter_Null::ALL))
->addValidators(array('NotEmpty'))
->addValidator(new Zend_Validate_StringLength(array('min' => 2, 'max' => '40')))
->addValidator(new Zend_Validate_Db_NoRecordExists('regiao', 'nome'))
->setAttribs(array('class' => 'upper'))
->setName('nome');
$submit = new Zend_Form_Element_Submit('salvar');
$submit->setName('Salvar');
$cancelar = new Zend_Form_Element_Button('cancelar');
$cancelar->setName('Cancelar')
->setAttribs(array("onClick" => "dialogoConfirm('Cancelar','Deseja Cancelar ?','" . $view->url(array('module' => 'cadastros', 'controller' => 'regiao', 'action' => 'index')) . "');"));
$this->addElements(array($cod_regiao, $nome, $submit, $cancelar));
//Configuração dos Decorators
$this->setDecorators(array(
array('ViewScript', array('viewScript' => "regiao/" . $front_controller->getRequest()->getActionName() . "phtml"))
));
$this->setElementDecorators(array(
'ViewHelper',
array('Errors', array('class' => 'erroValidacao')),
'Description',
'Label'
));
$submit->removeDecorator('label');
$cancelar->removeDecorator('label');
}
}
RegiaoController.php [editAction] (это действие li nk the CadastroRegiao.php и edit.html)
Посмотрите: этот код всегда возвращает «NOT WALID», когда пользователь не меняет никакой информации, просто сохраните исходную информацию.
public function editAction() {
$model = new Cadastros_Model_Regiao();
$form = new Cadastros_Form_CadastroRegiao();
if ($this->_request->isPost()) {
if ($form->isValid($this->_request->getPost())) {
$model->update($form->getValues());
$this->_redirect('cadastros/regiao');
}else
echo "NOT IS VALID";
} else {
$regiao = $model->find($this->_getParam('cod_regiao'));
$form->populate($regiao);
$this->view->form = $form;
}
}
И, наконец, мой edit.phtml
<div id="tabs">
<ul>
<li><a href="#tabs-1">Edição de Região</a></li>
</ul>
<div id="tabs-1">
<div class="msg_aviso">
<img src="<?= $this->baseUrl(); ?>/css/imagens/close.png" width="16" height="16" title="Clique para fechar" alt="Clique para fechar" class="fechar_aviso" />
<span class="title">Aviso !</span>
<p>
1. Todos os caracteres especiais e acentos presentes no campo <b>Nome</b> serão removidos.<br />
</p>
</div>
<form action="" enctype="multipart/form-data" method="post" name="form_cad_regiao">
<?= $this->form->cod_regiao; ?>
<?= $this->form->nome; ?><br />
<br />
<div class="acoes">
<?= $this->form->Salvar; ?>
<?= $this->form->Cancelar; ?>
</div>
</form>
</div>
I изменено на print_r .. как вы сказали. Посмотрите, какое шоу: Array ([cod_regiao] => Array() [nome] => Array ([0] => recordFound) [Salvar] => Array() [Cancelar] => Array()) – RonaldoLanhellas
Я не могу прочитать что с его другого языка, но я предполагаю, что его высказывание записи не существует. Возьмите эту строку: -> addValidator (новый Zend_Validate_Db_NoRecordExists ('regiao', 'nome')) – Rijndael
Да, это проблема. новая строка Zend_Validate_Db_NoRecordExists делает это, но почему бы не показать какую-либо ошибку об этом в форме? В моем newAction, когда пользователь разрешил входной пустой apper ошибку: «Вы должны заполнить это поле». – RonaldoLanhellas