91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

YII 2.0 Bad Request (#400)

發布時間:2020-07-02 22:39:51 來源:網絡 閱讀:1469 作者:xtceetg 欄目:開發技術


post提交表單的時候出現在這個錯誤是因為Yii2.0默認開啟了_crsf的驗證

可以在控制器里局部禁用
public $enableCsrfValidation = false ->覆蓋父類的屬性

也可以在配置文件中全局禁用
 'components' => [
        'request' => [
            /**
            /*!!! insert a secret key in the following (if it is empty) - this is required by    
            /*cookie validation
            /**
            'cookieValidationKey' => '83r5HbITBiMfmiYPOZFdL-raVp4O1VV4',
            'enableCookieValidation' => false,
            'enableCsrfValidation' => false,
        ]

當然,我們并不建意這樣做。

如果是用ActiveForm生成的表單,用傳統的POST提交這里是不會有問題的。

我們可以來看看YII2.0的源碼。

\yii\widgets\ActiveForm
這個類里面有一個run方法
/**
     * Runs the widget.
     * This registers the necessary javascript code and renders the form close tag.
     * @throws InvalidCallException if `beginField()` and `endField()` calls are not matching
     */
    public function run()
    {
        if (!empty($this->_fields)) {
            throw new InvalidCallException('Each beginField() should have a matching endField() call.');
        }

        $content = ob_get_clean();
        echo Html::beginForm($this->action, $this->method, $this->options);
        echo $content;

        if ($this->enableClientScript) {
            $id = $this->options['id'];
            $options = Json::htmlEncode($this->getClientOptions());
            $attributes = Json::htmlEncode($this->attributes);
            $view = $this->getView();
            ActiveFormAsset::register($view);
            $view->registerJs("jQuery('#$id').yiiActiveForm($attributes, $options);");
        }

        echo Html::endForm();
    }
可以看到 echo Html::beginForm($this->action, $this->method, $this->options);這樣一句。
在Html::beginForm()這個方法里面
if ($csrf && $request->enableCsrfValidation && strcasecmp($method, 'post') === 0) {
    $hiddenInputs[] = static::hiddenInput($request->csrfParam, $request->getCsrfToken());
}
這樣一段代碼就是在表單寫入了一個hide input加入了_csrf
如果不是用的ActiveForm則需要手動加入:
<input type="hidden" name="<?php echo Yii::$app->request->csrfParam;?>" value="<?php echo Yii::$app->request->getCsrfToken();?>">

如果是ajax post則要在data后面也帶上這個參數

YII2.0 標準寫法

<?php $this->beginPage() ?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <?= Html::csrfMetaTags() ?>
    <title><?= Html::encode($this->title) ?></title>
    <?php $this->head() ?>
</head>
表單
<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
<?php ActiveForm::end(); ?>


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

寻甸| 赤城县| 涟源市| 曲阳县| 余姚市| 安徽省| 南丰县| 原平市| 恭城| 固原市| 越西县| 长武县| 巫溪县| 巩义市| 吉木乃县| 城固县| 溧阳市| 皮山县| 平顶山市| 宁安市| 石嘴山市| 武夷山市| 高雄县| 安吉县| 从化市| 静乐县| 海城市| 龙泉市| 吉首市| 涟源市| 自治县| 霍城县| 延庆县| 武清区| 顺义区| 恭城| 昌宁县| 定边县| 沙坪坝区| 新干县| 射阳县|