I have the following widget:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'feast-days-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'day',
'id',
array(
'class'=>'CButtonColumn',
'template'=>'{delete}',
),
),
));
Filters:
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'postOnly + delete', // we only allow deletion via POST request
);
}
Rules:
public function accessRules()
{
return array(
array('allow',
'actions' => array('index','view','create', 'admin', 'delete', 'update'),
'roles' => array('master'),
),
array('deny', // deny all users
'users' => array('*'),
),
);
}
Delete action:
public function actionDelete($id)
{
FeastDays::model()->deleteAllByAttributes(array('id'=>$id));
// 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'));
}
The actionDelete I'm using is the umpteenth one, looks like it never actually reaches it. First I didn't have unique ID-s, only days, I gave ID-s to the models because I thought it might cause an issue that I'm using dates as attributes in the function, but same result.
I was searching a lot about this issue and most people had the problem that some .js files were loaded before the jQuery, but in my webapp jQuery loads first. Others' problem was that the ajax used GET instead of POST, but I've checked in Firebug that my request uses POST. I even disabled ajax but I still get error 400 without it.
Please help me, I'm lost.
I finally ended up solving it myself. Looks like it needed an ID that contains only integer values (I tried it with using uniqid() to generate ID-s for each dates but it still threw error 400), if it gets only integer ID-s which are given to the actionDelete(), it works properly. If anyone knows why it is happening I would appreciate their answer, because I find this case very strange.