Ответ 1
Добавьте это в раздел <?= Html::csrfMetaTags()?>
вашего макета: <?= Html::csrfMetaTags()?>
Не удалось проверить ошибку отправки данных
Создайте одну публичную функцию в Yii2. Но отправьте данные, не принимаемые в этом методе, см. Следующие изображения ошибок. Почему это происходит?
Добавьте это в раздел <?= Html::csrfMetaTags()?>
вашего макета: <?= Html::csrfMetaTags()?>
Если вы создаете форму вручную (т.е. Не используя методы yii form), вы должны добавить поле ввода следующим образом:
<input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />
источник: http://zero-exception.blogspot.com/2015/01/yii2-using-csrf-token.html
Существуют различные решения этой проблемы, я думаю, понимание того, почему это произошло, в первую очередь помогает решить проблему.
Если CSRF не является проблемой,
Если вы используете linux, проверьте файл php.ini для таких входных данных:
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M
; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M
На основе ваших расчетов настройте вышеуказанные параметры php.ini, чтобы удовлетворить ваши потребности, а затем проверьте. У меня была аналогичная проблема, и я решил это.
Также иногда вы можете получить эту ошибку, используя Yii 2.0 из-за post_max_size, upload_max_filesize, max_input_time тоже, возможно, веб-сервер может обрезать сообщение, поэтому проверьте на nginx - client_max_body_size или в apache - LimitRequestBody
Проверьте, есть ли скрытый ввод в вашей форме с токеном CSRF. Он должен выглядеть
<input type="hidden" name="_csrf" value="ZEZ6Y0xrY3ARGS42fTwhMQgkDgF6BCEGEx4SMXQMBR4CPy0iPCIwNQ==">
Здесь обсуждался длинный рассказ github
Поэтому отключить csrf как-то не уверенно для ajax-запроса. Я неоднократно встречал эту проблему.
Поэтому не забудьте отправить _csrf-ключ, когда вы отправляете данные POST через ajax.
Чтобы окончательно отключить проверку csrf в целом приложении, добавьте ниже код в свои конфигурации.
$config = [
'components' => [
'request' => [
'enableCsrfValidation' => false,
],
],
];
$ csrf =\yii :: $app-> request-> csrfParam;
$ token =\yii :: $app-> request-> csrfToken;
//начать с
echo Html :: hiddenInput ($ csrf, $ token);
//завершаем
Небольшая дифференциация ответа dchakarov из-за использования уровней Yii2 вместо
_csrf
переменная _frontendCsrf
.
<input type="hidden" name="_frontendCsrf" value="<?=Yii::$app->request->getCsrfToken()?>" />
Это второй раз, когда этот вопрос мне не помог, хотя я ранее оставил комментарий, поэтому я должен опубликовать ответ.
Добавьте это в свой контроллер:
public $enableCsrfValidation = false;