Yii Framework Forum: [Risolto] Refresh Di Un Form Senza Fare Il Submit - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[Risolto] Refresh Di Un Form Senza Fare Il Submit oppure fare il submit eseguendo una azione che non sia il create ... Rate Topic: -----

#1 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 05 October 2012 - 10:45 AM

ho una form che aggiunge 'utenti', circa

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 ...
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#2 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 05 October 2012 - 11:07 AM

non puoi semplicemente non far validare i campi sul model?
0

#3 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 05 October 2012 - 11:20 AM

si certo, ma come si fa ?

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 !??
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#4 User is offline   emafer 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 182
  • Joined: 23-February 12
  • Location:Amandola

Posted 05 October 2012 - 11:49 AM

View Postrealtebo, on 05 October 2012 - 11:20 AM, said:

si certo, ma come si fa ?

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...
0

#5 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 05 October 2012 - 06:57 PM

non puoi mettere due pulsanti.. con name differente?

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.
0

#6 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 06 October 2012 - 06:17 AM

perdona la mia completa ignoranza in maniera, sono 4 giorni solo che ci lavoro con Yii...

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 ?' !?
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#7 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 06 October 2012 - 08:11 AM

Em... se tu vuoi che un campo non sia considerato nella validazione, non metterlo required.
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?
0

#8 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 06 October 2012 - 12:41 PM

quello che dice sensorario lo trovo condivisibile, cmq
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,
		));
	}

0

#9 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 07 October 2012 - 06:41 AM

Purtroppo ribadisco che NON è possibile fare una chiamata ajax, in quanto si scontra con l'RBAC ed altre regole aziendali ...

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.
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#10 User is offline   sensorario 

  • Elite Member
  • Yii
  • Group: Moderators
  • Posts: 1,986
  • Joined: 07-September 10
  • Location:Cesena (Italy)

Posted 07 October 2012 - 01:26 PM

Questa affermazione è strana:

Quote

NON è possibile fare una chiamata ajax, in quanto si scontra con l'RBAC ed altre regole aziendali


Se deve essere visibile, ... mostrala:

Quote

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.


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".
0

#11 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 08 October 2012 - 01:46 AM

Le regole di validazione si impostano nella funzione rules del model, dato che tu non accetti la password come input, togli la regola di validazione.

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?>

0

#12 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 08 October 2012 - 02:13 AM

Grazie per queste due info:

- 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
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#13 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 08 October 2012 - 02:20 AM

Io sono sempre stato soddisfatto di Yt1, tanto non devo controllare il valore.
0

#14 User is offline   zaccaria 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 2,232
  • Joined: 04-October 09
  • Location:Moscow

Posted 08 October 2012 - 02:22 AM

Comunque non capisco, perche' devi mettere un bottone con scritto "Genera", non puoi semplicemente generarla a priori e mandarla?

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.
0

#15 User is offline   st4nny 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 336
  • Joined: 10-April 12

Posted 08 October 2012 - 02:31 AM

devi leggere la documentazione:
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.
0

#16 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 08 October 2012 - 02:58 AM

Per il discorso MVC ammetto la mia ignoranza :-[


Per il 'name' mi sono spiegato male, so come cambiare di per se il 'name', l'avevo visto questo metodo nelle api, ma fatto sta che viene trasmesso come campo $_POST col nome 'yt0' o 'yt1'... vorrei cambiare questo, perchè controllare nel codice in questo modo mi fa proprio schifo, per far capire a quello dopo di me cosa sto facendo devo commentare spiegando cos'è yt0..

if(isset($_POST["yt0'])) {. ...



scusate era una cretinata ... cambia davvero il name, funziona,... :D
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

#17 User is offline   realtebo 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 632
  • Joined: 03-October 12
  • Location:Ferrara

Posted 08 October 2012 - 03:04 AM

@Zaccaria

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, ...
Il computer non ragiona, ma ha sempre ragione.
Ricordalo quando fai il debug
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users