我在我的视图中缓存了包含表单的html片段。
<?php $form = ActiveForm::begin(); ?>
<?php echo $form->field($model, 'name'); ?>
<?= Html::submitButton('Save') ?>
<?php ActiveForm::end() ?>
问题在于CSRF验证令牌 - 它应该是动态的(不是静态的)。有没有其他/更好的方法如何渲染它而不再禁用和再次启用它?
<?php Yii::$app->request->enableCsrfValidation = false; ?>
<?php $form = ActiveForm::begin(); ?>
<?php Yii::$app->request->enableCsrfValidation = true; ?>
<input type="hidden" name="_csrf" value="<?php echo $this->renderDynamic('return Yii::$app->request->csrfToken;'); ?>">
<?php echo $form->field($model, 'name'); ?>
<?= Html::submitButton('Save') ?>
<?php ActiveForm::end() ?>
如果我不禁用&amp;启用CsrfValidation我在html中有两个令牌 - 第一个来自缓存,第二个是动态的。
答案 0 :(得分:1)
我刚刚遇到同样的问题,最后经过几个小时的不同处理后,我想出了一种用jQuery修改它的方法。
$this->registerJs("$(document).ready(function(){
$('input[name=_csrf]').val('".$this->renderDynamic('return Yii::$app->request->csrfToken;')."');
});", View::POS_END);
然后摆脱你在那里的所有额外的东西
<?php $form = ActiveForm::begin(); ?>
<?php echo $form->field($model, 'name'); ?>
<?= Html::submitButton('Save') ?>
<?php ActiveForm::end() ?>
答案 1 :(得分:0)
另一种方式:
<?php $form = ActiveForm::begin(['options' => ['csrf' => false]]); ?>
<input type="hidden" name="<?= $this->renderDynamic('return Yii::$app->request->csrfParam;'); ?>" value="<?= $this->renderDynamic('return Yii::$app->request->csrfToken;'); ?>" />
<?php ActiveForm::end(); ?>