0

まあ、私は zend_form から ViewScript を使用して edit.phtml の editAction からコンテンツをロードしますが、ユーザーがコンテンツを変更せずに [保存] ボタンをクリックすると、行 $form->isValid() は常に null を返します。

すべての私のコードを見てください:

CadastroRegiao.php (このコードはすべてのコンポーネントを edit.pthml ページにビルドします)

<?php

class Cadastros_Form_CadastroRegiao extends 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] (このアクションは CadastroRegiao.php と edit.html をリンクします)

見てください:ユーザーが情報を変更しない場合、このコードは常に「NOT IS VALID」を返します。元の情報を保存するだけです。

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>   

4

1 に答える 1