Đối tượng loại IlluminateHttprequest không thể gọi được

Khi tôi lần đầu tiên sử dụng Symfony, thành phần symfony/http-foundation đã làm tôi kinh ngạc. Theo tôi, nó là một trong những gói thiết yếu nhất hỗ trợ các ứng dụng web PHP hiện đại. Nền tảng HTTP lấp đầy khoảng trống từ các tính năng cốt lõi của PHP, với giao diện hướng đối tượng thân thiện cho các yêu cầu và phản hồi

Trong khuôn khổ Laravel, các đối tượng Yêu cầu và Phản hồi của Illuminate được hưởng lợi từ thành phần nền tảng HTTP thông qua tính kế thừa và cung cấp một API tuyệt vời trên các lớp cốt lõi rất thú vị khi sử dụng

Trong bài đăng này, hãy cùng khám phá một số phương thức hữu ích và hữu ích mà Laravel cung cấp thông qua đối tượng Illuminate Request

Lớp

$request->accepts[['application/xml', 'text/xml']];

8 tổ chức chức năng theo ba đặc điểm mà chúng ta sẽ đi sâu vào

  • $request->accepts[['application/xml', 'text/xml']];

    9
  • // Determines the format based on the request

    // Returns `json` if the format cannot be found

    // within the acceptable content types

    $request->format['json'];

    0
  • // Determines the format based on the request

    // Returns `json` if the format cannot be found

    // within the acceptable content types

    $request->format['json'];

    1

Tôi không chỉ ra bất cứ điều gì mới hoặc khai sáng, nhưng hy vọng bạn khám phá ra một hoặc hai phương pháp hữu ích. Tôi hy vọng các nhà phát triển mới sử dụng framework Laravel sẽ tìm hiểu sâu hơn về nguồn gốc của các lớp quan trọng này và đánh giá cao sự tiện lợi của đối tượng Illuminate Request

Tương tác với các loại nội dung

Trong vòng đời của yêu cầu/phản hồi, đôi khi bạn sẽ cần xác định ý định của yêu cầu thông qua tiêu đề HTTP

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

2. Xung quanh tiêu đề này,

$request->accepts[['application/xml', 'text/xml']];

9 cung cấp cho chúng ta nhiều đường cho những thứ lặp đi lặp lại thay vì ghép chúng lại với nhau thông qua yêu cầu nền tảng HTTP

Cụ thể, chúng ta có thể sử dụng các phương thức JSON sau để xác định xem người dùng có yêu cầu JSON hay không, tất cả sẽ cung cấp cho chúng ta câu trả lời

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

4

$request->wantsJson[];

$request->expectsJson[];

$request->isJson[];

$request->acceptsJson[];

Đầu tiên, phương thức isJson[] kiểm tra rõ ràng đối với

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

5 và

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

6 trong tiêu đề

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

2. Phương thức `isJson[] rất hữu ích để xác định xem máy khách có đang gửi JSON hay không

Sự khác biệt giữa

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

8 và

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

9 là sắc thái.

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

9 được liên kết với tiêu đề

/**

* Retrieve an input item from the request.

*

* @param string|null $key

* @param mixed $default

* @return mixed

*/

public function input[$key = null, $default = null]

{

return data_get[

$this->getInputSource[]->all[] + $this->query->all[], $key, $default

];

}

1 khi hình thành một phản hồi thích hợp cho yêu cầu, trong khi

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

8 được sử dụng để xác định định dạng của yêu cầu hiện tại

Tương tự, phương thứcexpectedJson[] xác định xem người dùng có mong đợi hợp lý một phản hồi JSON với các điều kiện sau hay không

  • /**

    * Retrieve an input item from the request.

    *

    * @param string|null $key

    * @param mixed $default

    * @return mixed

    */

    public function input[$key = null, $default = null]

    {

    return data_get[

    $this->getInputSource[]->all[] + $this->query->all[], $key, $default

    ];

    }

    3 nếu yêu cầu là yêu cầu AJAX, không phải yêu cầu PJAX và chấp nhận bất kỳ loại nội dung nào [_______14_______4]
  • HOẶC LÀ
  • trì hoãn đến

    // Determines the format based on the request

    // Returns `json` if the format cannot be found

    // within the acceptable content types

    $request->format['json'];

    9 nếu điều trên không đúng

Cuối cùng, phương thức acceptJson[] rất hữu ích để xác định xem

/**

* Retrieve an input item from the request.

*

* @param string|null $key

* @param mixed $default

* @return mixed

*/

public function input[$key = null, $default = null]

{

return data_get[

$this->getInputSource[]->all[] + $this->query->all[], $key, $default

];

}

6 có nằm trong các loại phản hồi được chấp nhận hay không. Phương thức

/**

* Retrieve an input item from the request.

*

* @param string|null $key

* @param mixed $default

* @return mixed

*/

public function input[$key = null, $default = null]

{

return data_get[

$this->getInputSource[]->all[] + $this->query->all[], $key, $default

];

}

7 sử dụng một phương thức tổng quát hơn trong cùng một đặc điểm có tên là

/**

* Retrieve an input item from the request.

*

* @param string|null $key

* @param mixed $default

* @return mixed

*/

public function input[$key = null, $default = null]

{

return data_get[

$this->getInputSource[]->all[] + $this->query->all[], $key, $default

];

}

8, phương thức này nhận vào một chuỗi hoặc mảng các loại nội dung

$request->accepts[['application/xml', 'text/xml']];

Phương pháp cuối cùng tôi muốn đề cập trong đặc điểm này là phương pháp

/**

* Retrieve an input item from the request.

*

* @param string|null $key

* @param mixed $default

* @return mixed

*/

public function input[$key = null, $default = null]

{

return data_get[

$this->getInputSource[]->all[] + $this->query->all[], $key, $default

];

}

9, mà bạn có thể sử dụng để xác định định dạng trong phản hồi dự kiến ​​[với một mặc định tùy chọn]

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

Có một vài phương pháp khác mà bạn có thể kiểm tra bằng cách duyệt qua nguồn của InteractsWithContentTypes. đặc điểm php

Tương tác với đầu vào

Sự thuận tiện được cung cấp để làm việc với đầu vào HTTP là phần yêu thích của tôi trong đối tượng Yêu cầu chiếu sáng mở rộng. Nó có sự tiện lợi và tiện ích to lớn trong các ứng dụng Laravel cho mã soạn sẵn mà bạn có thể viết lặp đi lặp lại

Đặc điểm của đặc điểm

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

0 là phương thức input[]. Phương pháp này rất đơn giản, vì vậy tôi sẽ chỉ cho bạn ở đây trước khi đi sâu vào cách sử dụng nó

/**

* Retrieve an input item from the request.

*

* @param string|null $key

* @param mixed $default

* @return mixed

*/

public function input[$key = null, $default = null]

{

return data_get[

$this->getInputSource[]->all[] + $this->query->all[], $key, $default

];

}

Nếu bạn nhìn sâu vào bên trong, trình trợ giúp

$email = $request->input['email'];

1 kết hợp với phương pháp này sẽ cung cấp dịch vụ một cửa để nhận thông tin đầu vào từ nhiều nguồn khác nhau

  • Tham số đầu vàoBag
  • Truy vấn yêu cầu

Bạn thường sử dụng phương thức này để nhận các tham số

$email = $request->input['email'];

2 và thậm chí bạn có thể sử dụng nó để truy cập đầu vào từ chuỗi truy vấn

$email = $request->input['email'];

Lớp chính

$email = $request->input['email'];

3 cũng tận dụng phương thức all[] của đặc điểm

// Determines the format based on the request

// Returns `json` if the format cannot be found

// within the acceptable content types

$request->format['json'];

0 để cung cấp lối tắt cho đầu vào

// Internally calls $request->all[] and tries

// to get the input from the request

$request->email

Một yêu thích khác của tôi là phương pháp

$email = $request->input['email'];

5 về đặc điểm này. Thông thường, tôi muốn loại bỏ mọi thứ trừ dữ liệu tôi đang cố truy cập và có thể lưu trữ

// variadic arguments via func_get_args[]

$request->only['email', 'password'];

 

// Or via an array

$request->only[['email', 'password']];

Tôi chỉ thích[] để đưa vào danh sách trắng những gì tôi muốn từ yêu cầu và tránh rò rỉ dữ liệu ngoài ý muốn vào ứng dụng từ dữ liệu khách hàng

Một phương pháp hữu ích khác là truy xuất đầu vào dưới dạng boolean, điều này rất hữu ích trong việc xác định xem đầu vào là

/**

* Retrieve an input item from the request.

*

* @param string|null $key

* @param mixed $default

* @return mixed

*/

public function input[$key = null, $default = null]

{

return data_get[

$this->getInputSource[]->all[] + $this->query->all[], $key, $default

];

}

3 hay

$email = $request->input['email'];

7

// Check opt_in for boolean values, with a default of true

// Returns true when the input is:

// "1", "true", "on", and "yes"

$request->boolean['opt_in', true];

Đặc điểm này có các phương pháp hữu ích để làm việc với các tiêu đề HTTP

// Get the token from the Authorization header

// Removing the "Bearer " prefix if it exists.

// i.e., `Authorization: Bearer 1234`, would return 1234.

$request->bearerToken[];

 

$request->hasHeader['X-Custom-Header'];

 

$request->header['X-Custom-Header'];

Các phương thức tiêu đề này giúp thuận tiện tránh truy cập các tiêu đề từ yêu cầu Symfony cơ bản

// Equivalent to $request->header['X-Custom-Header'];

$request->headers->get['X-Custom-Header'];

 

// Equivalent to $request->hasHeader['X-Custom-Header']

! is_null[$request->headers->get['X-Custom-Header']];

Một số phương thức trợ giúp hữu ích khác khi làm việc với đầu vào bao gồm

$request->accepts[['application/xml', 'text/xml']];

0

Tương tác với dữ liệu Flash

Một nhu cầu phổ biến trong các ứng dụng phía máy chủ là lưu trữ dữ liệu yêu cầu trong phiên khi xảy ra những lỗi như lỗi xác thực. Nhấp nháy dữ liệu vào phiên đảm bảo người dùng có thể sửa bất kỳ đầu vào biểu mẫu không hợp lệ nào và lưu trữ mọi dữ liệu thích hợp từ yêu cầu để sử dụng trong yêu cầu và phản hồi tiếp theo

Bạn có thể quen thuộc với trình trợ giúp

$email = $request->input['email'];

8 trong tệp Blade, trình trợ giúp này điền vào giá trị đầu vào bằng dữ liệu phiên được flash từ yêu cầu trước đó

$request->accepts[['application/xml', 'text/xml']];

1

Người trợ giúp

$email = $request->input['email'];

8 thực sự đang trì hoãn phương pháp

$email = $request->input['email'];

8 tương tự trong đặc điểm này

$request->accepts[['application/xml', 'text/xml']];

2

Nhưng làm cách nào để chúng tôi nhận được dữ liệu trong phiên ngay từ đầu?

Nếu bạn chưa quen với Laravel, việc nhấp nháy dữ liệu phiên có vẻ giống như phép thuật, bởi vì Xác thực thực hiện việc này tự động. Khi xảy ra lỗi xác thực, khung sẽ đưa ra một

// Internally calls $request->all[] and tries

// to get the input from the request

$request->email

1 mà cuối cùng sẽ lưu trữ dữ liệu được flash trong phiên thông qua Phản hồi thông qua Trình xử lý ngoại lệ

$request->accepts[['application/xml', 'text/xml']];

3

Lưu ý rằng điều quan trọng là

// Internally calls $request->all[] and tries

// to get the input from the request

$request->email

2 đảm bảo đầu vào

// Internally calls $request->all[] and tries

// to get the input from the request

$request->email

3 và

// Internally calls $request->all[] and tries

// to get the input from the request

$request->email

4 không được lưu trữ trong phiên

Hầu hết thời gian, trình xác nhận sẽ đảm nhiệm việc flash dữ liệu vào phiên, nhưng bạn có thể flash dữ liệu vào phiên theo cách thủ công thông qua đối tượng yêu cầu

$request->accepts[['application/xml', 'text/xml']];

4

Để nhấn mạnh lại, hãy cẩn thận khi sử dụng phương pháp này trực tiếp để đảm bảo bạn không flash dữ liệu nhạy cảm vào phiên của người dùng. Thận trọng hơn, bạn có thể sử dụng phương thức

// Internally calls $request->all[] and tries

// to get the input from the request

$request->email

5 của đối tượng yêu cầu

$request->accepts[['application/xml', 'text/xml']];

5

Hoặc nghịch đảo

$request->accepts[['application/xml', 'text/xml']];

6

Macro và hơn thế nữa

Hãy nhớ rằng vì đối tượng Yêu cầu chiếu sáng kế thừa Yêu cầu nền tảng HTTP, nên bạn có mọi thứ mà thành phần nền tảng phải cung cấp trong tầm tay. Tôi sẽ liên kết đến tài liệu của thành phần bên dưới nếu bạn muốn tìm hiểu sâu hơn

Ngoài ra, bạn có thể mở rộng đối tượng Yêu cầu trong các ứng dụng thông qua macro. Laravel thực hiện điều này với phương thức

// Internally calls $request->all[] and tries

// to get the input from the request

$request->email

6

$request->accepts[['application/xml', 'text/xml']];

7

Tìm hiểu thêm

Tôi hy vọng bài viết này hữu ích cho những người mới sử dụng Laravel framework muốn khám phá một số công cụ hữu ích mà Laravel đã xây dựng trên lớp HTTP cốt lõi của các ứng dụng Laravel. Đối với những người có nhiều kinh nghiệm hơn với Laravel, tôi hy vọng bài viết này đã giới thiệu một số phương thức mới trong đối tượng Illuminate Request hoặc truyền cảm hứng cho bạn tìm hiểu sâu hơn về các lớp này

Tôi khuyến khích bạn kiểm tra các tài nguyên sau để tìm hiểu thêm về các đối tượng yêu cầu và phản hồi trong Laravel

Chủ Đề