web-dev-qa-db-fra.com

Laravel 5/Lumen Request Header?

Donc, je ne sais pas trop comment procéder. J'ai essayé plusieurs choses et je vais en énumérer une ci-dessous, mais ce que j'essaie de faire, c'est de stocker les informations envoyées dans une requête http dans une variable PHP.

Voici une vue de Chrome Postman de l’envoi de la demande que je veux envoyer. Remarque "pubapi" est un "en-tête".

PostMan View

Je m'amuse avec les demandes Lumen comme vous pouvez le voir documenté ici ( http://Lumen.laravel.com/docs/requests ) et j'ai essayé d'utiliser les éléments ci-dessous pour les afficher, mais cela ne fonctionne pas. évidemment.

echo Request::all();

Je mets ceci dans mon contrôleur et j'ai ...

use Illuminate\Http\Request;

dans mon contrôleur.

Alors, comment pourrais-je dire stocker l'en-tête que j'envoie "pubapi" dans une variable php dans mon contrôleur?

MODIFIER

Je ne sais pas si cela vous aidera. Cependant, si je regarde les docs des frameworks Laravel, je vois ceci http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_header } cette tentative génère la même erreur. dans mon code. Ainsi, par exemple, j'ai essayé ce qui suit et j'ai obtenu la même erreur.

echo Request::header('pubapi');
17
kevingilbert100

Essayez de changer le Illuminate\Http\Request en Request.

- use Illuminate\Http\Request;
+ use Request;
16
balintant

Vous comprenez mal l'objet de requête Laravel à deux niveaux. 

Premièrement, l'erreur que vous obtenez est due au fait que vous avez référencé l'objet au lieu de la façade. Les façades permettent de transférer les appels de méthodes statiques à des méthodes non statiques.

Deuxièmement, vous envoyez la valeur sous forme d'en-tête, mais vous tentez d'accéder aux paramètres de la demande. Cela ne vous donnera jamais ce que vous voulez.

Voici un moyen simple de voir un exemple de ce que vous voulez en créant un itinéraire test comme ceci:

Route::match(['get','post'], '/test', function (Illuminate\Http\Request $request) {
    dd($request->headers->all());
});

Publiez cette route et vous verrez vos en-têtes, dont l'un sera pubapi . Veillez à ce que la définition de la méthode d'itinéraire corresponde à la façon dont vous soumettez la demande (par exemple, GET ou POST).

Appliquons ceci au contrôleur, ArticleController:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ArticleController extends Controller
{
    public function index(Request $request)
    {
        $pubapi = $request->header('pubapi'); // string
        $headers = $request->headers->all(); // array
        /*
          $pubapi === $headers['pubapi']
        */
    }
}
30
Qevo

En utilisant

echo app('request')->header('pubapi');

Au lieu de

echo Request::header('pubapi');

Semblait fonctionner parfaitement. Quelqu'un pourrait-il fournir une explication supplémentaire pour expliquer pourquoi cela a fonctionné et ma méthode originale n'a pas fonctionné?

11
kevingilbert100

En fait, vous l’appelez de manière statique, c’est pourquoi il n’obtient pas la classe Request appropriée et une erreur de projection, vous pouvez procéder comme suit

use Illuminate\Http\Request;

//inside your controller
class YourClass extends Controller{
   public function yourFunction(Request $request){
        //for getting all the request
        dd($request->all());

        //for getting header content
        dd($request->header('pubapi);
   }
}
1
Shahrukh Anwar