cbuttoncolum Delete
#1
Posted 11 January 2011 - 06:32 AM
ho un problema con i cbuttoncoloum messi in una gridview
senza cambiare link view e update mi funzionano mentre il delete mi da un errore
400,'Invalid request. Please do not repeat this request again
come si pùo risolvere?
vedo che fa riferimento al seguente codice:
public function actionDelete($id)
{
if(Yii::app()->request->isPostRequest)
{
// we only allow deletion via POST request
$this->loadModel($id)->delete();
// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
else
throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}
#2
Posted 11 January 2011 - 06:38 AM
Prova a rimovere
if(Yii::app()->request->isPostRequest)
#4
Posted 11 January 2011 - 11:12 AM
#5
Posted 11 January 2011 - 12:18 PM
public function getIsPostRequest()
{
return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'POST');
}
e posibile che il tuo server no ha questa variabile $_SERVER['REQUEST_METHOD'] ?
#6
Posted 13 January 2011 - 04:52 AM
<form ... action="index.php?r=site/page" method="post"> ... <input type="text" name="prova" /> ... </form>
ed avere sia $_GET["r"] che $_POST["prova"];
E' più corretto fare come fa Yii che controlla REQUEST_METHOD ma count($_POST) non dovrebbe essere trascurata. Che ne pensate?
#7
Posted 13 January 2011 - 04:53 AM
#8
Posted 13 January 2011 - 05:02 AM
a proposito... hai provato a vedere che cosa contiene questa variable da te?
#10
Posted 13 January 2011 - 06:34 AM
public function actionDelete($id) {
if(Yii::app()->request->isPostRequest) {
$this->loadModel($id)->delete();
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
else
{
var_dump($_SERVER['REQUEST_METHOD']);
exit();
//throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}
}
Mi restituisce
string(3) "GET". Il problema, ora, è riuscire a capire come mai accade questo.
PS. Ho messo exit(); per via del fatto che l'eccezione mi avrebbe mostrato solamente:
Error 400 Invalid request. Please do not repeat this request again.
#11
Posted 13 January 2011 - 06:42 AM
Posta qui il codice della view dove chiami la CGridView...
#12
Posted 13 January 2011 - 06:56 AM
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'iscrizioni-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'id_evento',
'ragionesociale',
'provincia',
'riferimento',
'telefono',
/*
'fax',
'email',
*/
array(
'class'=>'CButtonColumn',
),
),
)); ?>Ed ecco l'HTML generato:
<div id="iscrizioni-grid" class="grid-view"> <div class="keys" style="display:none" title="/projectsrl.com/index.php?r=iscrizioni/admin"><span>15</span></div> <div class="summary">Displaying 1-1 of 1 result(s).</div> <table class="items"> <thead> <tr> <th id="iscrizioni-grid_c0"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&Iscrizioni_sort=id">ID</a></th><th id="iscrizioni-grid_c1"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&Iscrizioni_sort=id_evento">Id Evento</a></th><th id="iscrizioni-grid_c2"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&Iscrizioni_sort=ragionesociale">Ragione Sociale</a></th><th id="iscrizioni-grid_c3"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&Iscrizioni_sort=provincia">Provincia</a></th><th id="iscrizioni-grid_c4"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&Iscrizioni_sort=riferimento">Riferimento (Sig. Sig.ra)</a></th><th id="iscrizioni-grid_c5"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&Iscrizioni_sort=telefono">Recapito telefonico</a></th><th class="button-column" id="iscrizioni-grid_c6"> </th></tr> <tr class="filters"> <td><input name="Iscrizioni[id]" type="text"></td><td><input name="Iscrizioni[id_evento]" type="text"></td><td><input name="Iscrizioni[ragionesociale]" type="text" maxlength="250"></td><td><input name="Iscrizioni[provincia]" type="text" maxlength="250"></td><td><input name="Iscrizioni[riferimento]" type="text" maxlength="250"></td><td><input name="Iscrizioni[telefono]" type="text" maxlength="250"></td><td> </td></tr> </thead> <tbody> <tr class="odd"><td>15</td><td>26</td><td>Ciao </td><td>mamma</td><td>guada co</td><td>come </td><td class="button-column"><a class="view" title="View" href="/projectsrl.com/index.php?r=iscrizioni/view&id=15"><img src="/projectsrl.com/assets/b0f16b1d/gridview/view.png" alt="View"></a> <a class="update" title="Update" href="/projectsrl.com/index.php?r=iscrizioni/update&id=15"><img src="/projectsrl.com/assets/b0f16b1d/gridview/update.png" alt="Update"></a> <a class="delete" title="Delete" href="/projectsrl.com/index.php?r=iscrizioni/delete&id=15"><img src="/projectsrl.com/assets/b0f16b1d/gridview/delete.png" alt="Delete"></a></td></tr> </tbody> </table> </div>
#13
Posted 13 January 2011 - 06:59 AM
Simile a questo:
jQuery('#test-grid a.delete').live('click',function() {
if(!confirm('Are you sure you want to delete this item?')) return false;
$.fn.yiiGridView.update('test-grid', {
type:'POST',
url:$(this).attr('href'),
success:function() {
$.fn.yiiGridView.update('test-grid');
}
});
return false;
});
E qui il tipo del request e settato a POST
#14
Posted 13 January 2011 - 09:33 AM
<script type="text/javascript">
/*<![CDATA[*/
jQuery(function($) {
$('.search-button').click(function(){
$('.search-form').toggle();
return false;
});
$('.search-form form').submit(function(){
$.fn.yiiGridView.update('iscrizioni-grid', {
data: $(this).serialize()
});
return false;
});
jQuery('#iscrizioni-grid a.delete').live('click',function() {
if(!confirm('Are you sure you want to delete this item?')) return false;
$.fn.yiiGridView.update('iscrizioni-grid', {
type:'POST',
url:$(this).attr('href'),
success:function() {
$.fn.yiiGridView.update('iscrizioni-grid');
}
});
return false;
});
jQuery('#iscrizioni-grid').yiiGridView({'ajaxUpdate':['iscrizioni-grid'],'ajaxVar':'ajax','pagerClass':'pager','loadingClass':'grid-view-loading','filterClass':'filters','tableClass':'items','selectableRows':1});
});
/*]]>*/
</script> L'unico intervento che ho fatto nel codice è il seguente:
/**
* @return array relational rules.
*/
public function relations () {
return array(
'nome_evento'=>array(self::BELONGS_TO, 'Events', 'id_evento'),
);
}e dunque in diversi posti ho usato questo nuovo campo:
Nella view:
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'id',
'nome_evento.description',
'ragionesociale',
'provincia',
'riferimento',
'telefono',
'fax',
'email',
),
)); ?>Nella _view:
<b><?php echo CHtml::encode($data->getAttributeLabel('nome_evento.description')); ?>:</b>
<?php echo CHtml::encode($data->nome_evento->description); ?>
<br />Nell'update:
<?php
$this->breadcrumbs=array(
'Iscrizioni'=>array('index'),
substr($model->nome_evento->description, 0,10).' ...'=>array('view','id'=>$model->id),
'Update',
);
?>Dovrebbe essere l'unica cosa diversa dal normale codice generato da Yii. Io ho aggiunto questo campo manualmente. C'era forse un modo diverso di aggiungere un riferimento ad una chiave esterna? Possibile che sia quello che, in un modo o nell'altro, "infastidisca" il normale codice di Yii?
#15
Posted 13 January 2011 - 10:01 AM
hai usato mai firefox con firebug... non vedo altro modo di scoprire cosa succede qui...
#16
Posted 13 January 2011 - 12:01 PM
In verità il problema lo avevo risolto esattamente come hai suggerito tu a sbondi, ovvero commentando "isPostRequest". Però mi sarebbe piaciuto non ricorrere a questo stratagemma.
#17
Posted 17 January 2011 - 03:36 AM
#19
Posted 17 January 2011 - 04:40 AM
#20
Posted 17 January 2011 - 06:21 AM

Help













