У меня есть Yii2 удалить действие в контроллере, и мне нужно перенаправить на index.php с помощью переменной id методом POST. Вот как я это делаю с помощью метода GET:
public function actionDelete($id)
{
$this->findModel($id)->delete();
return $this->redirect(['index?id=' . $id]);
}
Как я могу перенаправить с помощью метода POST?
@AndreiLupuleasa Я предпочитаю метод перенаправления Yii2.
Если вы хотите перенаправить данные публикации, вы всегда можете отобразить промежуточное представление, в котором вы создаете форму, которая отправляет данные публикации.






Я не думаю, что это возможно, см. ссылку ниже:
Вы не можете перенаправить с помощью метода 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;
}
Вы смотрели на stackoverflow.com/questions/5576619/php-redirect-with-post-data ?