wertymne
Новичок
Привет всем! Никак не могу побороть ошибку, уже дня так два.
Предыстория. Я создал контроллер с действием update
, инициализировал форму с полями сущности, которую я обновляю:
. Форма работает отлично, но стоит раскоментировать код с выводом checkbox`ов, выводится ошибка 400. При просмотре кода страницы, csrf генерируется и передается в обоих случаях. Пробовал такэе описывать поле черзе аттрибут модели (создал св-во и вызвал поле методом field()) - не помогло.
Мои предположения. В случае добавления в запрос (post, т.к. передача файлов происходит успешно) переменных, не относящихся к модели, которую я редактирую ($model), CSRF перестает проверяться, т.к. при закоментированном поле все работает отлично. Немного полазив в классе \yii\web\Request, я обраружил, что на этапе загрузки cookie и проверки при помощи cookieValidationKey, cookie с _csrf не проходит проверку подлинности, от туда уже выскакивает неверный csrf и ошибка 400 - дальше не лез.
В чем может быть проблема (может, я что-то не учел) и как мне ее решить?
Предыстория. Я создал контроллер с действием update
PHP:
/**
* Updates an existing Car model.
* If update is successful, the browser will be redirected to the 'update' page.
* @param integer $id
* @return mixed
*/
public function actionUpdate($id) {
$model = $this->findModel($id);
if( $model->load(Yii::$app->request->post()) && $model->save() ) {
//$car_images_delete = Yii::$app->request->post('car_image_delete');
/*if( is_array($car_images_delete)
&& count($car_images_delete) > 0 )
CarPhoto::find()
->where(['id' => $car_images_delete, 'car_id' => $model->id])
->delete();*/
/*$car_images_add = UploadedFile::getInstancesByName('car_image_add');
if( is_array($car_images_add) )
foreach( $car_images_add as $car_image_add ) {
$CarPhoto = new CarPhoto();
$CarPhoto->car = $model;
$CarPhoto->image = $car_image_add;
$CarPhoto->save();
}*/
return $this->redirect(['update', 'id' => $model->id]);
} else
return $this->render('update', [
'model' => $model,
]);
}
PHP:
<div class="car-form">
<?php $form = ActiveForm::begin([
'options' => ['enctype' => 'multipart/form-data']
]); ?>
<?= $form->field($model, 'name')->textInput(['maxlength' => 255]) ?>
<?= $form->field($model, 'slug')->textInput(['maxlength' => 50]) ?>
<?= $form->field($model, 'brand_id')->dropDownList(ArrayHelper::map(Brand::find()->asArray()->all(), 'id', 'name'), ['prompt'=>'Выберите марку']) ?>
<?= $form->field($model, 'old_price')->textInput(['maxlength' => 13]) ?>
<?= $form->field($model, 'top_sale')->checkbox() ?>
<div class="form-group">
<?= Html::label('Фотографии') ?>
<? foreach( $model->carPhotos as $CarPhoto ) { ?>
<p><?= Html::img($CarPhoto->getThumbFileUrl('image', 'thumb')) ?></p>
<p><?/*= Html::checkbox('car_image_delete[]', false, [
'value' => $CarPhoto->id,
'label' => 'Удалить',
'uncheck' => 0
]) */?></p>
<? } ?>
<?= Html::fileInput('car_image_add[]') ?>
</div>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Добавить' : 'Сохранить', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Мои предположения. В случае добавления в запрос (post, т.к. передача файлов происходит успешно) переменных, не относящихся к модели, которую я редактирую ($model), CSRF перестает проверяться, т.к. при закоментированном поле все работает отлично. Немного полазив в классе \yii\web\Request, я обраружил, что на этапе загрузки cookie и проверки при помощи cookieValidationKey, cookie с _csrf не проходит проверку подлинности, от туда уже выскакивает неверный csrf и ошибка 400 - дальше не лез.
В чем может быть проблема (может, я что-то не учел) и как мне ее решить?