2015-04-27 54 views
10

Vì vậy, tôi không thực sự chắc chắn làm thế nào để đi về điều này tôi đã thử một vài điều và tôi sẽ liệt kê một dưới đây tuy nhiên những gì tôi đang cố gắng làm là lưu trữ thông tin được gửi trong một yêu cầu http trong một biến PHP.Laravel 5/Lumen Yêu cầu Tiêu đề?

Đây là chế độ xem từ Người theo dõi Chrome của tôi gửi yêu cầu tôi muốn gửi. Lưu ý "pubapi" là "tiêu đề".

PostMan View

tôi đã rối tung xung quanh với các yêu cầu Lumen như bạn có thể xem tài liệu ở đây (http://lumen.laravel.com/docs/requests) và đã cố gắng sử dụng những điều sau đây để có thể hiển thị chúng nhưng nó không làm việc rõ ràng.

echo Request::all(); 

Tôi đặt này trong bộ điều khiển của tôi và tôi có ...

use Illuminate\Http\Request; 

trong điều khiển của tôi.

Vậy làm cách nào tôi có thể nói lưu trữ tiêu đề tôi đang gửi "pubapi" vào biến php trong bộ điều khiển của mình?

EDIT

Không chắc chắn nếu điều này sẽ giúp đỡ, tuy nhiên nhìn vào Laravel khuôn khổ tài liệu tôi thấy http://laravel.com/api/5.0/Illuminate/Http/Request.html#method_header này cố gắng này ném những lỗi tương tự trong mã của tôi. Vì vậy, ví dụ tôi đã thử những điều sau đây và đạt đến cùng một lỗi.

echo Request::header('pubapi'); 

Trả lời

9

Cố gắng thay đổi Illuminate\Http\Request thành Request.

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

Đã tìm ra được nhưng tôi đã cho tôi câu trả lời tốt nhất cho nó dù sao ha! Cảm ơn!! – kevingilbert100

+0

@ kmgilbert100, bạn có thể sử dụng Illuminate \ Http \ Request với tiêm (đặt một đối số Request $ request vào hàm điều khiển. Đó là giải pháp đẹp nhất mà tôi nghĩ.) – balintant

9

Sử dụng

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

Thay vì

echo Request::header('pubapi'); 

Dường như để làm việc hoàn hảo. Ai đó có thể cung cấp giải thích bổ sung cho lý do tại sao điều này làm việc và phương pháp ban đầu của tôi không?

+4

Bạn đang cố gắng sử dụng mặt tiền, nhưng bạn đang nhập Yêu cầu lớp đầy đủ. Tuyên bố sử dụng của bạn phải là "sử dụng Yêu cầu;" thay vì "sử dụng Illuminate \ Http \ Request;" Đầu tiên là mặt tiền và thứ hai là lớp yêu cầu thực tế. Nếu bạn thay đổi câu lệnh sử dụng của mình thì Request :: all() sẽ hoạt động. Hoặc bạn có thể sử dụng \ Request :: all() và nó sẽ hoạt động. – jfadich

+0

Điều đó hoạt động nhờ! @jfadich – kevingilbert100

16

Bạn hiểu nhầm đối tượng yêu cầu Laravel ở hai cấp độ.

Đầu tiên, lỗi bạn nhận được là do bạn đang tham chiếu đối tượng thay vì Mặt tiền. Mặt tiền có một cách để chuyển tiếp các cuộc gọi phương thức tĩnh đến các phương thức không tĩnh.

Thứ hai, bạn đang gửi giá trị làm tiêu đề nhưng đang cố gắng truy cập thông số yêu cầu. Điều này sẽ không bao giờ cung cấp cho bạn những gì bạn muốn.

Đây là một cách đơn giản để xem ví dụ về những gì bạn muốn bằng cách tạo ra một lộ trình kiểm tra như sau:

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

Đăng lên tuyến đường này và bạn sẽ thấy tiêu đề của bạn, một trong số đó sẽ là pubapi. Chú ý rằng định nghĩa phương thức tuyến đường khớp với cách bạn gửi yêu cầu (ví dụ GET hoặc POST).

Hãy áp dụng điều này với bộ điều khiển, 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'] 
     */ 
    } 
} 
Các vấn đề liên quan