Pergunta

Estou usando um controlador de conta que não possui sua própria tabela, mas usa modelo de usuário.

Tudo funciona bem, exceto - quando eu valida qualquer formulário. Ele diz que a validação falha (quando tento falhar na validação para verificar), mas não lança o erro abaixo do campo

Visão

<?php echo $this->Form->input('id'); ?>
              <label for="UserPassword">New Password:</label>
              <?php echo $this->Form->text('password', array('type' => 'password', 'value' => 'harsha')); ?><em>Password must be min 6 characters.</em> <?php echo $form->error('password'); ?>

Ação do controlador

            if($this->User->saveField('password', $this->data['User']['password'], array('validate' => 'first'))) {
                $this->Session->setFlash('Password has been changed.', 'flash-success');
            } else {
                $this->Session->setFlash('There was some problem with our system. Please try after some time.', 'flash-warning');
            }
Foi útil?

Solução

Tentar debug()no conteúdo de $this->validationErrors na sua opinião, bem como $this->data no seu controlador logo após um envio de formulário. Isso deve fornecer muito mais informações para trabalhar.

Eu suspeito que seu problema seja o bolo, está construindo insumos de formulário com base no modelo errado - criando campos de formulário para Account.id e Account.password ao invés de User.id e User.password. Isto é porque FormHelper pega seu modelo padrão do controlador/visualização de que ele é invocado, que no seu caso aparece AccountsController.

Para gerar o User.id e User.password Fields O manuseio de envio do seu controlador espera, você precisará prender User. na tua FormHelper chamadas. Desta forma:

$this->Form->input('User.id');
$this->Form->text('User.password');

Outras dicas

Você tentou:

echo $session->flash();

Observe que o que quer que o manual diga, ele retorna, não ecoa. Registrei isso um tempo atrás e ele foi alterado no manual 1.3, mas não no 1.2.

Oi você que está perguntando
Se você deseja mostrar a mensagem de erro que retorna do Usermodel's Validate
Para que você possa adicionar código de linha abaixo da senha de formulário de entrada

  <?php 
      if ($this->Form->isFieldError('password')) { 
       echo $this->Form->error('password', array('class' => 'error')); 
    ?>

E se você quiser mostrar a mensagem de erro que definida pelo Method Setflash
Você deve redirecionar a página e depois usar $ this-> session-> flash ('flash-name') na página que você deseja mostrar

   <?php
    //in UsersController
    $this->Session->setFlash('message here', 'flash-name');
    //in view
    echo $this->Session->flash('flash-name');
   ?>

Boa sorte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top