Yii2: Как перенаправить с помощью метода POST? - PullRequest
0 голосов
/ 14 марта 2019

У меня есть действие Yii2 delete в контроллере, и мне нужно перенаправить на index.php с переменной id методом POST. Вот как я делаю это с помощью метода GET:

public function actionDelete($id)
{
    $this->findModel($id)->delete();

    return $this->redirect(['index?id=' . $id]);
}

Как я могу перенаправить, используя метод POST?

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Нельзя перенаправить, используя метод POST, так как это ярлык для Response::redirect(), который определен как

Этот метод добавляет заголовок «Location» к текущему ответу.

В качестве альтернативы для достижения желаемого эффекта вы можете вызвать actionDelete через ajax и ответить success или failure от действия на вызов ajax, где вы можете отправить id, используя $.post().

Например, рассмотрим следующий код, где у нас есть кнопка, к которой мы привязываем событие click и получаем идентификатор записи, которую нам нужно удалить, она может быть либо внутри скрытого поля, мы отправляем запрос actionDelete, и если все в порядке, мы отправляем идентификатор, используя $.post().

$js = <<< JS

$("#delete").on('click',function(){
    var id = $("#record_id").val();
    $.ajax({
        url:'/controller/action',
        method:'post',
        data:{id:id},
        success:function(data){
            if(data.success){
                $.post('/controller/action',{id:data.id});
            }else{
                alert(response.message);
            }
        }
    });
});
JS;
$this->registerJs($js,\yii\web\View::POS_READY);
echo Html::hiddenInput('record_id', 1, ['id'=>'record_id']);
echo Html::button('Delete',['id'=>'delete']);

Ваш actiondelete() должен выглядеть ниже

public function actionDelete(){

    $response = ['success'=>false];

    $id = Yii::$app->request->post('id');

    Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;

    try{
        $this->findModel($id)->delete();
        $response['success'] = true;
        $response['id'] = $id;
    }catch(\Exception $e){
        $response['message'] = $e->getMessage();
    }
    return $response;
}
1 голос
/ 14 марта 2019

Я не думаю, что это возможно, см. Ссылку ниже:

https://forum.yiiframework.com/t/redirect-with-post/36684/2

...