CakePHP Validation
-
26-09-2019 - |
Domanda
Sto usando un controller di account, che pretende molto avere un proprio tavolo, ma usi utente modello.
Tutto funziona bene, tranne - quando ho convalidare qualsiasi forma. Si dice convalida non riesce (quando provo a fallire la convalida per controllare), ma pretende molto gettare l'errore sotto il campo
Visualizza
<?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'); ?>
Azione di controllo
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');
}
Soluzione
Prova debug()
ing il contenuto del $this->validationErrors
a vostro parere, così come $this->data
nel controller solo dopo un invio di un modulo. Questo dovrebbe dare molte più informazioni su cui lavorare.
ho il sospetto che il vostro problema è Cake è la costruzione di input del form sulla base del modello sbagliato - la costruzione di campi di modulo per Account.id
e Account.password
invece di User.id
e User.password
. Questo perché FormHelper
prende il suo modello di default dal controller / vista viene invocato da, che nel tuo caso appare AccountsController
.
Al fine di generare il User.id
e User.password
campi si aspetta di movimentazione presentazione del controller, avrete bisogno di anteporre User.
nelle chiamate FormHelper
. Così:
$this->Form->input('User.id');
$this->Form->text('User.password');
Altri suggerimenti
Hai provato:
echo $session->flash()
;
Si noti che qualunque sia il manuale dice, restituisce, senza echi. Mi sono collegato questo un po 'indietro ed è stato cambiato nel manuale di 1.3, ma non il 1.2.
Ciao voi che sta chiedendo
Se si desidera visualizzare l'errore-messaggio che di ritorno da di UserModel validate
Quindi è possibile aggiungere codice linea soffietto dopo la password modulo di input
<?php
if ($this->Form->isFieldError('password')) {
echo $this->Form->error('password', array('class' => 'error'));
?>
e se si desidera visualizzare l'errore-messaggio che insieme con il metodo di setFlash
è necessario reindirizzare la pagina e quindi utilizzare $ this-> session-> flash ( 'Flash-name') nella pagina che si desidera mostrare
<?php
//in UsersController
$this->Session->setFlash('message here', 'flash-name');
//in view
echo $this->Session->flash('flash-name');
?>
In bocca al lupo!