Actiondelete Post Only

Salve a tutti!

Sto realizzando un’applicazione con Yii e fino ad ora, sono riuscito bene o male a risolvere i vari problemi che si sono presentati grazie alla guida ufficiale, al forum ed ai wiki.

Ma non mi è chiaro perché per un actionDelete() è necessaria una richiesta tramite POST e non tramite GET.

Immagino che ciò sia dovuto a ragioni di sicurezza.

Inoltre non mi capisco perché, quando genero tramite gii le classi CRUD, non si tiene conto ti tale limitazione. Pertanto quando si va a cliccare sui link che prevedono l’eliminazione di un record si ottiene “Error 400 Your request is invalid.”, a meno che non si vada ad eliminare dal metodo filters() il rigo


'postOnly + delete',

.

Quindi per risolvere tale problema consigliate di rimuovere la limitazione alla operazioni di cancellazione oppure modificare i link delle view affinché eseguano una richiesta di tipo post?

Eventualmente, come modificare il link per la cancellazione presente in una gridview?

Grazie

Aggiornamento…

Effettuando ulteriori verifiche, il problema del non funzionamento dei link attraverso i quali si eliminano dei record, era dovuto al fatto che avevo linkato in protected/views/layouts/main.php il file di jQuery.

Quindi il codice generato da gii, come era ovvio, è corretto… :)

Per quando riguarda la gridview, non potendo utilizzare i pulsanti di default, ho la seguente situazione




array

(

	'class'=>'CButtonColumn',

	'template'=>'{delete}',

	'buttons'=>array

	(

		'delete' => array

		(

			'label'=>'Elimina la macrocategoria',

			'imageUrl'=>Yii::app()->request->baseUrl.'/images/x.png',

			'url'=>'#',

			'click'=>"function(){if(!confirm('Eliminare la macrocategoria '+$(this).parent().parent().children(':nth-child(2)').text()+'?')) return false;}",

		),

	),

),



non mi è chiaro come far in modo che cliccando sul pulsante per l’eliminazione di un record, venga effettuata una richiesta di tipo POST e non GET…

Se uno spider arriva su un sito e pesca una richiesta GET che fa un delete, … beh cancella tutto il tuo database =). Avere le rotte in POST è una buona pratica per salvarsi da cancellazioni accidentali.