Yii 1.1.x:CGridView中的CbuttonColumn {delete}使用POST

时间:2016-11-29 12:25:07

标签: php ajax yii cgridview

我有以下小部件:

$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}',  
            ),
),
));

过滤器:

public function filters()
{
    return array(
        'accessControl', // perform access control for CRUD operations
        'postOnly + delete', // we only allow deletion via POST request
    );
}

规则:

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('*'),
                    ),
    );
}

删除操作:

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

我正在使用的actionDelete是第一个,看起来它从未实际到达它。首先我没有唯一的ID-s,只有几天,我给了模型ID-s,因为我认为它可能会导致我在函数中使用日期作为属性的问题,但结果相同。

我正在搜索这个问题,大多数人都遇到了jQuery之前加载了一些.js文件的问题,但在我的webapp中,jQuery首先加载。 其他人的问题是ajax使用GET而不是POST,但我已经在Firebug中检查过我的请求使用POST。我甚至禁用了ajax但是如果没有它我仍会得到错误400。

请帮助我,我迷路了。

1 个答案:

答案 0 :(得分:0)

我终于自己解决了这个问题。看起来它需要一个只包含整数值的ID(我尝试使用 uniqid()为每个日期生成ID-s,但它仍然会引发错误400),如果它只获得整数ID-给予 actionDelete()的s,它可以正常工作。如果有人知道为什么会这样,我会很感激他们的答案,因为我觉得这个案子很奇怪。