Php Yii2-错误请求(#400)无法验证您提交的数据
我的yii2申请到昨天还可以正常工作,但今天提交的表格显示有错误。“错误请求(#400)无法验证您提交的数据。” 我在stackoverflow上发现了很多这样的问题,人们建议禁用csrf验证,我也尝试过禁用csrf验证。我甚至更新了我的作曲器,但它仍然不起作用 请提出任何其他可能的解决方案 这是我的表格代码:-Php Yii2-错误请求(#400)无法验证您提交的数据,php,yii,yii2,Php,Yii,Yii2,我的yii2申请到昨天还可以正常工作,但今天提交的表格显示有错误。“错误请求(#400)无法验证您提交的数据。” 我在stackoverflow上发现了很多这样的问题,人们建议禁用csrf验证,我也尝试过禁用csrf验证。我甚至更新了我的作曲器,但它仍然不起作用 请提出任何其他可能的解决方案 这是我的表格代码:- <h2>Open an Account</h2> <?php $form =
<h2>Open an Account</h2>
<?php
$form = ActiveForm::begin([
'id' => 'live-account-form',
'enableClientValidation' => true,
'fieldConfig' => [
'template' => '{input}{error}',
'options' => [
'tag' => false,
]
],
'options' => [
'class' => 'form-horizontal'
]
]);
?>
<div class="form-group">
<label for="signupform-first_name" class="col-sm-3 control-label">First Name*</label>
<div class="col-sm-9 field-signupform-first_name">
<?= $form->field($model, 'first_name')->textInput(['placeholder' => "Enter First Name"]) ?>
</div>
</div>
<div class="form-group">
<label for="singupform-last_name" class="col-sm-3 control-label">Last Name*</label>
<div class="col-sm-9 field-signupform-last_name">
<?= $form->field($model, 'last_name')->textInput(['placeholder' => 'Enter Last Name']) ?>
</div>
</div>
<div class="form-group">
<label for="signupform-email" class="col-sm-3 control-label">Email*</label>
<div class="col-sm-9 field-signupform-email">
<?= $form->field($model, 'email')->textInput(['placeholder' => "Enter Email Address"]) ?>
</div>
</div>
<div class="form-group">
<label for="signupform-country" class="col-sm-3 control-label">Country*</label>
<div class="col-sm-9 field-signupform-country">
<?= $form->field($model, 'country')->dropDownList(
ArrayHelper::map(PhCountry::find()->all(), 'intid', 'country_name'),
[
'prompt' => 'Select Country',
'onchange' => '$( "select#signupform-country_code" ).html("showLoading");
$.get( "index.php/site/fetch-country-code?id='.'"+$(this).val(),
function(data) {
$( "#signupform-country_code" ).val(data);
});'
]
) ?>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Phone Number*</label>
<div class="col-sm-9 phone-number-div">
<div>
<?= $form->field($model, 'country_code')->textInput(['placeholder' => 'Code', 'class' => 'country-code form-control']) ?>
</div>
<div class="field-signupform-phone">
<?= $form->field($model, 'phone')->textInput(['placeholder' => 'Enter Phone Number', 'class' => 'enter-phone-number form-control']) ?>
</div>
</div>
</div>
<button type="submit" class="btn btn-default">Create Account</button>
<?php
ActiveForm::end();
?>
使用以下命令:
public function beforeAction($action)
{
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}
您可以在主配置文件中使用以下配置在整个应用程序中全局禁用csrf验证
$config = [
'components' => [
'request' => [
'enableCsrfValidation' => false,
],
],
];
有两种方法可以尝试。首先在php.ini中增加post_max_大小。第二次运行composer更新并清除cookie,如下所示: -作曲家自我更新 -作曲家更新
-清除cookie我正在使用高级模板,遇到了此问题。经过多次头部撞击之后,我注意到yii的烘焙表单中使用的_csrf元标记被命名为“_csrf-frontend”(当然在前端)。请求cookie的名称也相同 前提是版面中的标题正在注册元标记
<?php $this->registerCsrfMetaTags() ?>
使用与ajax中的meta标记相同的名称提交_csrf。Yii也为此提供帮助
<?=Yii::$app->request->csrfParam?>
快速示例:
var postData = {
someparam : somevalue,
'<?=Yii::$app->request->csrfParam?>': '<?=Yii::$app->request->getCsrfToken()?>'
}
$.ajax({
type: 'post',
data: postData,
url: dataURL,
})
var postData={
someparam:somevalue,
'': ''
}
$.ajax({
键入:“post”,
数据:postData,
url:dataURL,
})
此处的帮助信息:您是否有关于Yi2或Apache/webserver日志中错误的其他信息?显示受尊重的表单和控制器我疯了,请检查我是否已在控制器
公共函数中添加表单和操作代码预操作($action){$this->enableCsrfValidation=false;返回父::预操作($action);}
感谢疯狂,现在它可以工作了。但我想再问一个问题,禁用csrf会不会给我的网站带来任何安全问题?这将是一个安全风险。这是真的。因为post_max_大小和upload_max_文件大小应该相同。在我的例子中是不同的。所以Yii2抛出异常。或者,如果您正在手动创建表单,请添加
var postData = {
someparam : somevalue,
'<?=Yii::$app->request->csrfParam?>': '<?=Yii::$app->request->getCsrfToken()?>'
}
$.ajax({
type: 'post',
data: postData,
url: dataURL,
})