我正在尝试在数据库中注册2个上传的图像,并将它们上传到“上传”文件夹。它给了我#400错误请求,如“无法验证您的数据提交”。 有想法该怎么解决这个吗?下面是我的代码。
Controller actionCreate():
public function actionCreate()
{
$model = new PhotoCategories();
if ($model->load(Yii::$app->request->post())) {
$model->image = UploadedFile::getInstance($model, 'image');
$model->thumbnail_image = UploadedFile::getInstance($model, 'thumbnail_image');
if ($model->upload()) {
$model->save();
}
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
Model使用ImageValidator。以下是rules()和upload()函数:
public function rules()
{
return [
[['name', 'thumbnail_image', 'image', 'description'], 'required'],
[['description'], 'string'],
[['name'], 'string', 'max' => 256],
[['name'], 'unique'],
[['thumbnail_image'], 'image', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
[['image'], 'image', 'skipOnEmpty' => false, 'extensions' => 'png, jpg']
];
}
public function upload() {
if ($this->validate()) {
$this->image->saveAs('uploads/' . $this->image->baseName . '.' . $this->image->extension);
$this->thumbnail_image->saveAs('uploads/' . $this->image->baseName . '.' . $this->image->extension);
return true;
} else {
return false;
}
}
表单的View文件如下:
<div class="photo-categories-form">
<?php $form = ActiveForm::begin(); ?>
<input type="hidden" name="<?= Yii::$app->request->csrfParam; ?>" value="<?= Yii::$app->request->csrfToken; ?>" />
<?= $form->field($model, 'name')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'thumbnail_image')->fileInput() ?>
<?= $form->field($model, 'image')->fileInput() ?>
<?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
即使我还在那里写了隐藏的输入,它仍然会把错误抛给我。
答案 0 :(得分:0)
Yii不允许CSRF是跨站点请求伪造默认的缩写。因此,如果您想要禁用CSRF检查,请在控制器中添加以下代码
public $enableCsrfValidation = false;
了解更多信息,请参阅此内容。 http://www.yiiframework.com/doc-2.0/guide-security-best-practices.html#avoiding-csrf
警告:禁用CSRF将允许任何站点向您的站点发送POST请求。在这种情况下,实施额外验证非常重要,例如检查IP地址或秘密令牌。
或
您需要在表单中设置为输入值。
<input type="hidden" name="<?= Yii::$app->request->csrfParam; ?>" value="<?= Yii::$app->request->csrfToken; ?>" />
注意: - 这是更好的方法来处理&#34;无法验证您的数据提交。&#34;错误。