Maison  >  Article  >  cadre php  >  Comment résoudre le problème selon lequel thinkphp ne peut pas obtenir les données de publication

Comment résoudre le problème selon lequel thinkphp ne peut pas obtenir les données de publication

WBOY
WBOYavant
2023-05-29 21:25:102123parcourir

1. Problème

Après avoir soumis le formulaire, les données de publication ne peuvent pas être obtenues via request->param() ou $this->request->param(), et un tableau vide est obtenu.

2. Cause du problème

  1. L'attribut enctype n'est pas défini dans le formulaire

Lorsque le formulaire est soumis, si l'attribut enctype n'est pas défini, la méthode de transmission des données par défaut est application/x. -www-form-urlencoded. Les données seront désormais placées dans les en-têtes de requête HTTP au lieu du corps de la requête. Par conséquent, lors de l'obtention des données de publication, nous devons utiliser $this->request->post() ou request()->post().

  1. Aucun en-tête de requête n'est défini lors de l'appel de l'interface

Lors de l'appel de l'interface, nous devons définir l'en-tête de requête correspondant, tel que Content-Type: application/json, sinon le serveur ne peut pas analyser les données. Si le Content-Type n'est pas défini, le serveur par défaut est application/x-www-form-urlencoded, et à ce moment-là, les données de publication seront placées dans l'en-tête de la requête http au lieu du corps de la requête, ce qui entraînera l'impossibilité d'obtenir correctement les données de publication.

3. Solution

  1. Définissez l'attribut enctype

Ajoutez enctype="multipart/form-data" dans le formulaire, afin que les données de publication puissent être obtenues correctement.

  1. Définir les en-têtes de requête

Lors de l'appel de l'interface, vous pouvez utiliser curl pour définir les en-têtes de requête. L'exemple de code est le suivant :

$data = array(
    'username' => 'admin',
    'password' => '123456'
);

$url = 'http://www.example.com/login';
$ch = curl_init();

$header = array(
    'Content-Type: application/json',
    'Content-Length: '.strlen(json_encode($data))
);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$res = curl_exec($ch);
curl_close($ch);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer