Почему не удается проверить ошибку отправки данных в Yii2?

enter image description here

Ошибка:

Не удалось проверить ошибку отправки данных

Создайте одну публичную функцию в Yii2. Но отправьте данные, не принимаемые в этом методе, см. Следующие изображения ошибок. Почему это происходит?

Ответ 1

Добавьте это в раздел <?= Html::csrfMetaTags()?> вашего макета: <?= Html::csrfMetaTags()?>

Ответ 2

Если вы создаете форму вручную (т.е. Не используя методы yii form), вы должны добавить поле ввода следующим образом:

<input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />

источник: http://zero-exception.blogspot.com/2015/01/yii2-using-csrf-token.html

Ответ 3

Существуют различные решения этой проблемы, я думаю, понимание того, почему это произошло, в первую очередь помогает решить проблему.

  1. Это вызвано недействительным токеном csrf, токеном csrf, сгенерированным пользователем, токеном csrf с истекшим сроком, все эти проблемы csrf возникают, если у вас есть собственные формы, созданные не с использованием класса ActiveForm.

Если CSRF не является проблемой,

  1. Другая причина возникает, когда вы пытаетесь загрузить несколько файлов, и веб-сервер не может обрабатывать нагрузку. Некоторые свойства, чтобы проверить это, чтобы убедиться, что вы находитесь на правильном пути, - это закрепить размер файлов, которые вы пытаетесь загрузить, и проверить веб-сервер post_max_size и upload_max_filesize

Если вы используете 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, чтобы удовлетворить ваши потребности, а затем проверьте. У меня была аналогичная проблема, и я решил это.

Ответ 4

Также иногда вы можете получить эту ошибку, используя Yii 2.0 из-за post_max_size, upload_max_filesize, max_input_time тоже, возможно, веб-сервер может обрезать сообщение, поэтому проверьте на nginx - client_max_body_size или в apache - LimitRequestBody

Ответ 5

Проверьте, есть ли скрытый ввод в вашей форме с токеном CSRF. Он должен выглядеть

<input type="hidden" name="_csrf" value="ZEZ6Y0xrY3ARGS42fTwhMQgkDgF6BCEGEx4SMXQMBR4CPy0iPCIwNQ==">

Ответ 6

Здесь обсуждался длинный рассказ github

Поэтому отключить csrf как-то не уверенно для ajax-запроса. Я неоднократно встречал эту проблему.

Поэтому не забудьте отправить _csrf-ключ, когда вы отправляете данные POST через ajax.

Ответ 7

Чтобы окончательно отключить проверку csrf в целом приложении, добавьте ниже код в свои конфигурации.

$config = [
    'components' => [
        'request' => [
            'enableCsrfValidation' => false,
        ],
    ],
];

Ответ 8

$ csrf =\yii :: $app-> request-> csrfParam;

$ token =\yii :: $app-> request-> csrfToken;

//начать с

echo Html :: hiddenInput ($ csrf, $ token);

//завершаем

Ответ 9

Небольшая дифференциация ответа dchakarov из-за использования уровней Yii2 вместо _csrf переменная _frontendCsrf.

<input type="hidden" name="_frontendCsrf" value="<?=Yii::$app->request->getCsrfToken()?>" />

Это второй раз, когда этот вопрос мне не помог, хотя я ранее оставил комментарий, поэтому я должен опубликовать ответ.

Ответ 10

Добавьте это в свой контроллер:

 public $enableCsrfValidation = false;