[Risolto] Refresh Di Un Form Senza Fare Il Submit oppure fare il submit eseguendo una azione che non sia il create ...
#1
Posted 05 October 2012 - 10:45 AM
ma la sto facendo come ce l'ha chiesta un cliente a cui non piacciono le cose semplici...
username: ___
password: ____
email :____
bla bla bla ____
bla bla bla12____
[crea utente]
richiesta: il campo password NON è editabile: devo fare un pulsante [genera password] che la genera secondo certe regole.
Quindi devo fare il submit del form, ma senza scatenare la validazione dei dati, perchè sennò l'utente vede una fila di campi obbligatori con l'errore che non può essere nullo...
come si disabilita la validazione eseguendo il submit con un pulsante invece di un altro ?
oppure : c'è modo di fare il submit eseguendo invece di actionCreate ... actionGeneratePassword ... ma facendo comunque vedere la form, con i dati già inseriti dall'utente, e la nuova password, senza eseguirne la validazione ?
EDIT: se ve lo state chiedendo: NO ... non posso fare una chiamata ajax .... si scontra con l'RBAM, se si chiama così, abbiamo già provato ... non avendo la sessione la chiamata ajax riceve il form di login ...eh eh ...
Ricordalo quando fai il debug
#3
Posted 05 October 2012 - 11:20 AM
1) come capisco che è stato premuto 'genera pwd' invece di 'crea utente' ?
-- posso vedere se ho tra i POST yt0 invece di yt1, che sono i due pulsanti ---
2) come faccio nel model in questo caso a non eseguire la validazione?
Per la precisione vorrei capire se è possibile che questa logica, essendo logica, venga messa nel controller, poi il controller potrà anche dire al model di non validare i dati, ma come !??
Ricordalo quando fai il debug
#4
Posted 05 October 2012 - 11:49 AM
realtebo, on 05 October 2012 - 11:20 AM, said:
1) come capisco che è stato premuto 'genera pwd' invece di 'crea utente' ?
-- posso vedere se ho tra i POST yt0 invece di yt1, che sono i due pulsanti ---
2) come faccio nel model in questo caso a non eseguire la validazione?
Per la precisione vorrei capire se è possibile che questa logica, essendo logica, venga messa nel controller, poi il controller potrà anche dire al model di non validare i dati, ma come !??
bè... il pulsante genera pwd potrebbe solo fare una chiamata ajax a una action che genera la password e in questo modo non è un submitbutton, altrimenti potresti gestire il tuo post: posto che il tuo submitbutton per la password si chiama 'pwd' se tra il post ti trovi la key 'pwd' vuol dire che è stato cliccato quindi non devi validare ma solo generare la pass e rinviare tutto alla pagina.
Secondo me è meglio la chiamata ajax che ti gestisci con jquery e che ti popola da sola il campo...
#5
Posted 05 October 2012 - 06:57 PM
il pulsante premuto lo trovi nel post.
nel controller verifichi da che pulsante arriva la chiamata.
-se bottone genera password.. fai quello che devi fare.. nn ho capito..
-se bottone crea utente, ci incolli dentro il codice.. if(isset($_POST['Model'])) $model->attributes $model->save. la validazione avviene in questo punto.
#6
Posted 06 October 2012 - 06:17 AM
DOVE nel controller intercetto quale pulsante effettua la chiamata ?! Perchè so come leggere dal post il pulsante premuto, ma dove?, in che metodo del controller ?
Lo chiedo perchè actionCreate viene eseguito ogni volta che viene caricata la pagina, e li posso cmq fare la verifica, ma come faccio a dire 'se premuto tasto genera allora NON eseguire la validazione dei dati ?' !?
Ricordalo quando fai il debug
#7
Posted 06 October 2012 - 08:11 AM
Se vuoi che assuma un certo valore casuale, fallo, ma nel controller appena prima di salvare il dato.
Visto che non deve essere scritto dall'utente ma generato casualmente, non c'è nemmeno bisogno che tu lo inserisca all'interno del form. A che serve mostrare una cosa che, ... non serve?
#8
Posted 06 October 2012 - 12:41 PM
per tornare alla tua richiesta,
dovresti fare una cosa del genere
public function actionCreate()
{
$model=new Utente;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Utente']) && isset($_POST['Utente']['salva']))
{
$model->attributes=$_POST['Utente'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
if(isset($_POST['Utente']) && isset($_POST['Utente']['genera_pwd']))
{
codice.
}
$this->render('create',array(
'model'=>$model,
));
}
#9
Posted 07 October 2012 - 06:41 AM
La password generata deve essere visibile, perchè va comunicata al nuovo utente, in quanto solo un operatore potrà crearli, genererà la password, se la segna, e viene salvata criptata. Richiesta del cliente ... fastidiosissima ... ma richiesta del cliente.
@st4nny: la validazione quindi viene effettuata come conseguenza della chiamata '$model->save()' ? Se si, era proprio proprio quello che stavo cercando.
Ricordalo quando fai il debug
#10
Posted 07 October 2012 - 01:26 PM
Quote
Se deve essere visibile, ... mostrala:
Quote
Quando richiami il metodo save() viene controllato che il model sia corretto. Se non lo è, ci sono dei problemi. Può essere utile sapere che passando $model->save(false); la "validazione" viene bypassata ed il model viene salvato anche se non "completo".
#11
Posted 08 October 2012 - 01:46 AM
La password generala subito:
public function actionCreate()
{
$model=new Utente;
$model->password=//generapassword;E nella view la mostri:
Ecco la tua password: <?php echo $model->password?>
#12
Posted 08 October 2012 - 02:13 AM
- save(false) non esegue le validazione
- il controllo sul $_POST va messo nell'action create.
Vi chiedo una ultima cosa: c'è modo di dare un name decente ai pulsanti ?
Genera viene chiamato in $_POST come 'yt0' e Salva come 'Yt1'. E' vero che non me ne frega nulla, ma per partire bene, vorrei fare tutto a regola d'arte
Ricordalo quando fai il debug
#13
Posted 08 October 2012 - 02:20 AM
#14
Posted 08 October 2012 - 02:22 AM
O non puoi generarla con una funzione javascript? E ancora non capisco che differenza ci sia a livello di RBAC tra una funzione ajax e un submit, sono esattamente la stessa cosa.
#15
Posted 08 October 2012 - 02:31 AM
http://www.yiiframew...itButton-detail
il secondo parametro corrisponde alle opzioni html:
<?php echo CHtml::submitButton('Genera Pwd', array('name' => 'gen_pwd')); ?>
cmq se sei nella pagina create e non usi ajax è normale che i controlli li devi
fare nell'action create, è la base di MVC.
#16
Posted 08 October 2012 - 02:58 AM
if(isset($_POST["yt0'])) {. ...
scusate era una cretinata ... cambia davvero il name, funziona,...
Ricordalo quando fai il debug
#17
Posted 08 October 2012 - 03:04 AM
Ho provato via Ajax, a chiamare users/user/generatePassword, creando una nuova "actionGeneratePassword" e di per se funzionava. Quando l'altro collega ha messo in piedi l'RBAC mi ha "venduto la cosa" dicendomi che via ajax non viene passata la sessione, e il sistema di Yii effettivamente mi restituiva invece che gli 8 caratteri in chiaro, l'html della pagina di login.
Mi ha venduto che avrebbe dovuto autorizzare in qualche modo, che credo neppure lui sa, visto che siamo tutti all'inizio, dicevo, avrebbbe dovuto autorizzare un utente non loggato ad accedere a quella action specifica e assolutamente non è da fare.... cosa vuoi che ti dica... e poi il cliente è abituato ad usare un software vecchio di 11 anni e desidera le sue vecchie schifose abitudine, le preferisce ad una interfaccia utente nuova, dinamica e flessibile, ...
Ricordalo quando fai il debug

Help















