Yii2发布表单无法执行操作

时间:2018-12-31 10:39:06

标签: yii2 yii2-advanced-app

我有一个用jQuery trigger触发的表单,如果我将方法设置为GET,它将起作用。但是如果方法是'POST'-400 Bad Request。 我的看法如下:

<?php if (Yii::$app->session->hasFlash('success')): ?>
    <div class="success-message text-center"><?= Yii::$app->session->getFlash('success') ?></div>
<?php else: ?>
    <form action="/order/confirmation" method="post" style="display: none" id="confirm-order">
        <input type="hidden" name="order_id" value="<?= $_GET['id'] ?>"/>
        <input type="hidden" name="confirm" value="1"/>
    </form>
<?php endif; ?>

<?php
$this->registerJs("
    (function(){
        let form = $('#confirm-order')       
        form.trigger('submit')
    })()
", \yii\web\View::POS_LOAD)
?>  

我的动作是:

public function actionConfirmation()
    {
        $id = Yii::$app->request->post('order_id');
        $confirm = Yii::$app->request->post('confirm');
        if($confirm){
            $order = Orders::findOne(['id' => $id]);
            $order->confirmed = 1;
            $order->update(false);
            Yii::$app->session->setFlash('success', Yii::t('app', 'Your personal information was deleted'));
        }
        return $this->render('confirmation');
    }

在我的UrlManager中,URL设置如下:

'order/confirmation' => 'order/confirmation',

还尝试将behaviors放在控制器动作中,例如:

public function behaviors()
    {
        return [
            'verbs' => [
                'class' => \yii\filters\VerbFilter::className(),
                'actions' => [
                    'confirmation'  => ['POST', 'GET'],
                ],
            ],
        ];
    }

没有任何帮助。摘要-GET有效。 POST不能。我这是什么错?

1 个答案:

答案 0 :(得分:2)

您应该像下面那样手动将带有CSRF令牌的输入添加到表单中,因为您没有使用android { allprojects { configurations { all { resolutionStrategy { force "org.ow2.asm:asm:7.0" } } } } ,而是自动添加了隐藏的输入来提交ActiveForm请求和所有{{1 }}请求要求使用POST令牌来阻止CSRF attacks,因此,我不建议您禁用它,但应手动提供输入:

POST