Yii Framework Forum: cbuttoncolum Delete - Yii Framework Forum

Jump to content

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

cbuttoncolum Delete Rate Topic: -----

#1 User is offline   sbondi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 33
  • Joined: 07-October 10

Posted 11 January 2011 - 06:32 AM

Ciao,

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.');
}
0

#2 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,336
  • Joined: 12-October 09
  • Location:Croatia

Posted 11 January 2011 - 06:38 AM

Sembra che non fai un request di tipo POST...

Prova a rimovere
if(Yii::app()->request->isPostRequest)

Find more about me.... btw. Do you know your WAN IP?
0

#3 User is offline   sbondi 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 33
  • Joined: 07-October 10

Posted 11 January 2011 - 10:04 AM

View Postmdomba, on 11 January 2011 - 06:38 AM, said:

Sembra che non fai un request di tipo POST...

Prova a rimovere
if(Yii::app()->request->isPostRequest)




giusto grazie era banale
Grazie ancora
0

#4 User is offline   sensorario 

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

Posted 11 January 2011 - 11:12 AM

Confermo che anche a me ha dato lo stesso errore. A questo punto vorrei far notare una cosa: il modulo ha come method="post" dunque non mi è ben chiaro perchè dia quell'errore. Io ho appena scaricato l'ultima versione. Non credo sia un "caso".
0

#5 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,336
  • Joined: 12-October 09
  • Location:Croatia

Posted 11 January 2011 - 12:18 PM

Questo e il metodo isPostRequest()
 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'] ?
Find more about me.... btw. Do you know your WAN IP?
0

#6 User is offline   sensorario 

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

Posted 13 January 2011 - 04:52 AM

Prima di Yii usavo controllare la count($_POST). Se Yii facesse lo stesso? Di fatto si possono effettuare richieste che sono in contemporanea get e post:

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

#7 User is offline   sensorario 

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

Posted 13 January 2011 - 04:53 AM

Adesso faccio una domanda stupida ..: non è che, per assurdo, "POST" viene confuso da "post"?
0

#8 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,336
  • Joined: 12-October 09
  • Location:Croatia

Posted 13 January 2011 - 05:02 AM

La variabile $_SERVER['REQUEST_METHOD'] e uno standard per questo e usata anche in Yii.. qui e la prima volta che qualchuno riporti che questo non lavora...

a proposito... hai provato a vedere che cosa contiene questa variable da te?
Find more about me.... btw. Do you know your WAN IP?
0

#9 User is offline   sensorario 

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

Posted 13 January 2011 - 06:25 AM

Provo subito e ti so dire.
0

#10 User is offline   sensorario 

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

Posted 13 January 2011 - 06:34 AM

Ho modificato actionDelete in questo modo:

    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.

0

#11 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,336
  • Joined: 12-October 09
  • Location:Croatia

Posted 13 January 2011 - 06:42 AM

Vuol dire che non si tratta di un POST request ma di un GET request ?

Posta qui il codice della view dove chiami la CGridView...
Find more about me.... btw. Do you know your WAN IP?
0

#12 User is offline   sensorario 

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

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&amp;Iscrizioni_sort=id">ID</a></th><th id="iscrizioni-grid_c1"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&amp;Iscrizioni_sort=id_evento">Id Evento</a></th><th id="iscrizioni-grid_c2"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&amp;Iscrizioni_sort=ragionesociale">Ragione Sociale</a></th><th id="iscrizioni-grid_c3"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&amp;Iscrizioni_sort=provincia">Provincia</a></th><th id="iscrizioni-grid_c4"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&amp;Iscrizioni_sort=riferimento">Riferimento (Sig. Sig.ra)</a></th><th id="iscrizioni-grid_c5"><a href="/projectsrl.com/index.php?r=iscrizioni/admin&amp;Iscrizioni_sort=telefono">Recapito telefonico</a></th><th class="button-column" id="iscrizioni-grid_c6">&nbsp;</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>&nbsp;</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&amp;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&amp;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&amp;id=15"><img src="/projectsrl.com/assets/b0f16b1d/gridview/delete.png" alt="Delete"></a></td></tr>
</tbody>
</table>
</div>

0

#13 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,336
  • Joined: 12-October 09
  • Location:Croatia

Posted 13 January 2011 - 06:59 AM

Nell HTML generatto dovrebe esserci anche il jQuery responsabile per il deletebutton

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
Find more about me.... btw. Do you know your WAN IP?
0

#14 User is offline   sensorario 

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

Posted 13 January 2011 - 09:33 AM

Purtroppo il codice è corretto. C'è da dire una cosa ... ho aggiunto

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

#15 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,336
  • Joined: 12-October 09
  • Location:Croatia

Posted 13 January 2011 - 10:01 AM

tutto OK nell tuo codice...

hai usato mai firefox con firebug... non vedo altro modo di scoprire cosa succede qui...
Find more about me.... btw. Do you know your WAN IP?
0

#16 User is offline   sensorario 

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

Posted 13 January 2011 - 12:01 PM

Uso chrome. Purtroppo non so capire il problema. Se dovessi risolvere ti faccio sapere. Guarda, se vuoi ti passo anche il codice ma non voglio farti lavorare per me. Se fosse un bug sarei molto felice di partecipare in questo modo alla "soluzione".

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

#17 User is offline   sensorario 

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

Posted 17 January 2011 - 03:36 AM

Amici del forum, abbiamo risolto!!! Nel mio caso, il delete non funzionava correttamente a causa del fatto che avevo inserito del codice javascript nella pagina senza seguire la codifica standard di Yii.
0

#18 User is offline   zaccaria 

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

Posted 17 January 2011 - 03:44 AM

In particolare cosa dava problemi?
0

#19 User is offline   Maurizio Domba Cerin 

  • Yii - Yesss It Is !!!
  • Yii
  • Group: Yii Dev Team
  • Posts: 4,336
  • Joined: 12-October 09
  • Location:Croatia

Posted 17 January 2011 - 04:40 AM

In breve... il jQuery era incluso due volte... e per una strana ragione se jQuery e incluso due volte il ajax request invece di essere POST era GET
Find more about me.... btw. Do you know your WAN IP?
0

#20 User is offline   sensorario 

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

Posted 17 January 2011 - 06:21 AM

Nessuna strana ragione =). Lo avevo fatto a mano, compresa cartella assets. Questo andava sicuramente a compromettere qualhe operazione automatica di jquery.
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