web-dev-qa-db-fra.com

Pourquoi ne pas pouvoir vérifier votre erreur de soumission de données dans Yii2?

enter image description here

Erreur:

Impossible de vérifier votre erreur de soumission de données

Créez une fonction publique dans Yii2. Mais, soumettez des données non acceptées dans cette méthode, voir les images d'erreur suivantes. Pourquoi est-ce arrivé?

32
Bharat Chauhan

Ajoutez ceci dans la section principale de votre mise en page: <?= Html::csrfMetaTags() ?>

18
WCO

Si vous créez le formulaire manuellement (c'est-à-dire sans utiliser les méthodes de formulaire yii), vous devez ajouter un champ de saisie comme celui-ci:

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

source: http://zero-exception.blogspot.com/2015/01/yii2-using-csrf-token.html

45
dchakarov

Il existe différentes solutions à ce problème, je suppose que comprendre pourquoi cela s'est produit en premier lieu aide à résoudre le problème.

  1. Cela est causé par un jeton csrf non valide, un jeton csrf généré par l'utilisateur, un jeton csrf expiré, tous ces problèmes 'csrf' se poseront lorsque vous avez des formulaires personnalisés construits sans utiliser la classe 'ActiveForm'.

Si CSRF n'est pas le problème,

  1. Son autre cause se produit lorsque vous essayez de télécharger plusieurs fichiers et que le serveur Web ne peut pas gérer la charge. Certaines propriétés à vérifier pour vous assurer que vous êtes sur la bonne voie consiste à claculer la taille des fichiers que l'on tente de télécharger et à vérifier la post_max_size et le upload_max_filesize du serveur Web

Si vous utilisez linux, vérifiez le fichier php.ini pour des entrées comme celles-ci:

; 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

En fonction de vos calculs, ajustez les paramètres php.ini ci-dessus pour répondre à vos besoins, puis testez. J'ai eu un problème similaire et je l'ai résolu.

14
Amos Kosgei

Pour désactiver définitivement la validation csrf dans toute l'application, ajoutez le code ci-dessous dans vos configurations.

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

Parfois, vous pouvez également obtenir cette erreur en utilisant Yii 2.0 en raison de post_max_size, upload_max_filesize, max_input_time également trop peut-être que le serveur Web peut couper le message, alors vérifiez nginx - client_max_body_size ou dans Apache - LimitRequestBody

3
Bruno de Oliveira

Une longue histoire a été discutée ici github

Donc, désactiver csrf en quelque sorte incertain pour la demande ajax. J'ai rencontré ce problème à plusieurs reprises.

N'oubliez donc pas d'envoyer la clé _csrf lorsque vous envoyez des données par POST via ajax.

3
ThangTD

Vérifiez s'il y a une entrée cachée dans votre formulaire avec le jeton CSRF. Cela devrait ressembler

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

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

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

//commencer à partir de

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

// fin à partir de

0