2013-05-24 4 views
0

Ну, я загружаю контент из 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> 

ответ

1

Вместо

echo "NOT IS VALID"; 

ли

print_r($form->getErrors()); 
+1

I изменено на print_r .. как вы сказали. Посмотрите, какое шоу: Array ([cod_regiao] => Array() [nome] => Array ([0] => recordFound) [Salvar] => Array() [Cancelar] => Array()) – RonaldoLanhellas

+0

Я не могу прочитать что с его другого языка, но я предполагаю, что его высказывание записи не существует. Возьмите эту строку: -> addValidator (новый Zend_Validate_Db_NoRecordExists ('regiao', 'nome')) – Rijndael

+0

Да, это проблема. новая строка Zend_Validate_Db_NoRecordExists делает это, но почему бы не показать какую-либо ошибку об этом в форме? В моем newAction, когда пользователь разрешил входной пустой apper ошибку: «Вы должны заполнить это поле». – RonaldoLanhellas

Смежные вопросы