データ送信エラーを確認できません
Yii2で1つのパブリック関数を作成します。ただし、このメソッドでは受け入れられないデータを送信します。次のエラー画像を参照してください。なぜこれが起こるのですか?
これをレイアウトのheadセクションに追加します:<?= Html::csrfMetaTags() ?>
フォームを手動で作成する場合(つまり、yiiフォームメソッドを使用せずに)、次のような入力フィールドを追加する必要があります。
<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パラメーターを調整し、テストします。同様の問題があり、解決しました。
アプリケーション全体でcsrf検証を永続的に無効にするには、構成に以下のコードを追加します。
$config = [
'components' => [
'request' => [
'enableCsrfValidation' => false,
],
],
];
また、post_max_size、upload_max_filesize、max_input_timeが原因でYii 2.0投稿をトリミングすることができるので、nginx-client_max_body_sizeまたはApache-LimitRequestBody
ここで長い話が議論されました github
そのため、csrfを無効にすると、ajaxリクエストがどうなるかわかりません。私はこの問題に何度も遭遇しました。
したがって、POST ajaxを使用してデータを送信する場合は、_csrfキーを送信することを忘れないでください。
CSRFトークンを使用してフォームに非表示の入力があるかどうかを確認します。次のようになります
<input type="hidden" name="_csrf" value="ZEZ6Y0xrY3ARGS42fTwhMQgkDgF6BCEGEx4SMXQMBR4CPy0iPCIwNQ==">
$ csrf =\yii :: $ app-> request-> csrfParam;
$ token =\yii :: $ app-> request-> csrfToken;
//から始まる
echo Html :: hiddenInput($ csrf、$ token);
//から終了