Validação de CakePHP
-
26-09-2019 - |
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');
}
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!