2015-04-27 5 views
10

Nie jestem do końca pewien, jak to zrobić. Próbowałem kilku rzeczy, a ja wymienię poniżej jeden, ale próbuję przechowywać informacje wysłane w żądaniu http w zmiennej PHP.Laravel 5/Lumen Żądanie nagłówka?

Oto widok z Chrome Listonosza o wysłaniu prośby, którą chcę wysłać. Uwaga "pubapi" to "nagłówek".

PostMan View

I zostały aprowizacji z wniosków Lumen jak widać udokumentowane tutaj (http://lumen.laravel.com/docs/requests) i próbowałem używając do możliwie nich, ale jej nie działa oczywiście wyświetlać następujące poniżej.

echo Request::all(); 

kładę to w moim kontrolera i muszę ...

use Illuminate\Http\Request; 

w moim kontrolera.

Jak mogę więc zapisać nagłówek, który wysyłam "pubapi" do zmiennej php w moim kontrolerze?

EDIT

Nie wiem, czy to pomoże, jednak patrząc na laravel Ramki docs widzę to http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_header próbuje to rzuca ten sam błąd w moim kodu. Tak na przykład próbowałem następujące i osiągnąłem ten sam błąd.

echo Request::header('pubapi'); 

Odpowiedz

9

Spróbuj zmienić Illuminate\Http\Request na Request.

- use Illuminate\Http\Request; 
+ use Request; 
+0

Już to wymyśliłem, ale pomyślałem, że dam ci najlepszą odpowiedź, tak czy inaczej! Dzięki!! – kevingilbert100

+0

@ kmgilbert100, możesz użyć Illuminate \ Http \ Request z wtryskiem (dodaj do funkcji kontrolera argument żądania Żądanie $.) To chyba najmilsze rozwiązanie.) – balintant

9

Korzystanie

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

Zamiast

echo Request::header('pubapi'); 

wydawało się działać idealnie. Czy ktoś mógłby podać dodatkowe wyjaśnienie, dlaczego to zadziałało, a moja oryginalna metoda nie?

+4

Próbujesz użyć elewacji, ale jesteś importowanie pełną klasę żądania. Twoim oświadczeniem o użyciu powinno być "Użyj żądania"; zamiast "użyj Illuminate \ Http \ Request;" Pierwsza to fasada, a druga to faktyczna klasa zgłoszeń. Jeśli zmienisz instrukcję użytkowania, to funkcja Request :: all() zadziała. Alternatywnie możesz użyć \ Request :: all() i to zadziała. – jfadich

+0

To dziękuje! @jfadich – kevingilbert100

16

Źle rozumiesz obiekt zapytania Laravel na dwóch poziomach.

Po pierwsze, otrzymywany błąd polega na tym, że odwołujesz się do obiektu zamiast do elewacji. Fasady mają sposób przekazywania wywołań statycznych metodami niestatycznymi.

Po drugie, wysyłasz wartość jako nagłówek, ale próbujesz uzyskać dostęp do parametrów żądania. To nigdy nie da ci tego, czego chcesz.

Oto prosty sposób, aby zobaczyć przykład tego, co chcesz, tworząc trasę testową tak:

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

pocztą na tej trasie i widać nagłówki, z których każdy będzie pubapi. Zwróć uwagę, że definicja metody trasy odpowiada temu, w jaki sposób przesyłasz żądanie (np. GET lub POST).

Zastosujmy to do sterownika, 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'] 
     */ 
    } 
}