Yii2: Как перенаправить методом POST?

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

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

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

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

Вы смотрели на stackoverflow.com/questions/5576619/php-redirect-with-post-d‌​ata ?

Andrei Lupuleasa 14.03.2019 13:20

@AndreiLupuleasa Я предпочитаю метод перенаправления Yii2.

Roby Sottini 14.03.2019 13:23

Если вы хотите перенаправить данные публикации, вы всегда можете отобразить промежуточное представление, в котором вы создаете форму, которая отправляет данные публикации.

Agustin Pazos 14.03.2019 14:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
4 205
2

Ответы 2

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

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

Вы не можете перенаправить с помощью метода POST, так как это ярлык для Response::redirect(), который определяется как

This method adds a "Location" header to the current response.

Что вы можете сделать в качестве альтернативы для достижения желаемого эффекта, так это вызвать 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;
}

Другие вопросы по теме