通过 POST 删除模型时请求 YII 无效

Invalid Request YII when delete model via POST

我想通过 post 删除我的模型,但我总是收到无效请求 这是我的观点

<?php
    echo CHtml::link(CHtml::encode('Delete image'), array('gambar/delete', 'id' => $data->id), array(
        'submit' => array('data/delete', 'id' => $data->id),
        'class' => 'delete', 'confirm' => 'This will remove the image. Are you sure?'
            )
    );
    ?>

这是我在 GambarController

中的操作
public function actionDelete() {
    if (Yii::app()->request->isPostRequest) {
        // we only allow deletion via POST request
        $this->loadModel()->delete();

        if (!isset($_GET['ajax']))
            $this->redirect(array('index'));
    }
    else
        throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
}

但是我总是得到Invalid Request,我看了一些论坛,但是我无法得到它。谁能帮帮我?

您正在使用 CHtml::link,这将生成一个 html <a> 标签。当您单击 <a> 时,您的浏览器会向服务器发送 HTTP GET 请求(而非 POST 请求)。所以 if(Yii::app()->request->isPostRequest) 始终是 false,因此您会看到 Invalid request 错误。您应该从操作中删除此条件。另外,$this->loadModel()->delete() 是无效的,因为 loadModel 得到一个 id 作为参数。所以 $this->loadModel($_GET['id'])->delete() 是正确的。

使用下面的代码

$this->loadModel(primarykey, 'TableName')->delete();

应该可以!

在大多数情况下你不能使用link(<a>)到POST。相反,像这样使用 <form>

<form action="<?php echo $this->createUrl('/gambar/delete/'.$model->id);?>" method="post">
    <button 
        type="submit"
        name="id"
        value="<?php echo $model->id?>"
        onclick="if (!confirm('Are you sure to delete this image?')) return false;">
        <i class="icon-white icon-trash"></i> Delete
    </button>
</form>