Laravel gửi yêu cầu từ bộ điều khiển

Đôi khi phát triển hệ thống, mình có một đôi khi bắt gặp trường hợp yêu cầu gọi một phương thức đăng bài từ một chức năng khác trong Laravel. Các chức năng này có thể có hoặc không nằm trong cùng một bộ điều khiển/lớp. Trước đây khi xử lý các trường hợp này, cách xử lý của mình rất thô sơ và việc xử lý trường hợp này khiến mã của mình rất rắc rối và gây khó khăn cho người khác khi đọc mã nếu không thực sự hiểu mục đích của đoạn . Sau một thời gian tìm hiểu thì mình cũng tìm ra cách tốt hơn để xử lý trường hợp này, vậy thì hôm nay mình sẽ giới thiệu cho các bạn cách xử lý của mình khi phải gọi một xử lý phương thức đăng bài từ một chức năng khác trong laravel

bài toán

Giả sử bạn có một phương thức rất phức tạp mà việc nhận tham số đầu vào là một

{$this->method}[]
2. Phương thức này bình thường sẽ được gọi từ một biểu mẫu hoặc một hàm AJAX. Vì vậy, làm thế nào bạn có thể gọi phương thức đó từ một phương thức khác - thậm chí là trong một lớp khác?

Để bài toán dễ tưởng tượng hơn, mình sẽ vào code cụ thể. Dưới đây là một phương pháp rất phức tạp mà chúng ta khởi động, và giả sử chúng ta không muốn chỉnh sửa lại chút nào

Phương pháp rất phức tạp

Trong khi đó chúng ta có một phương pháp khác mà ở đây chúng ta muốn gọi đến

{$this->method}[]
3

Phương pháp đơn giản

Cách xử lý đơn giản

Đây là cách trước đây mình hay sử dụng, đó là chúng ta tạo ra một hàm "Gọi", sao chép toàn bộ bộ phận mã lý của

{$this->method}[]
0 sang một hàm khác mà chúng ta có thể xử lý gọi từ hàm hiện tại. Về bản chất, bạn sẽ tạo một hàm để lấy dữ liệu từ yêu cầu đăng và sau đó gọi một hàm khác - hàm thực tế này mới là nơi thực hiện các lý - bằng cách truyền tham số xử lý từ yêu cầu sang. Vì thế, giờ đây khi
{$this->method}[]
0 được gọi, nó sẽ trích xuất dữ liệu từ Yêu cầu và truyền nó sang
{$this->method}[]
2 - đây mới là chức năng xử lý thực tế

ưu điểm

  • Đừng lặp lại chính mình. Bạn đang thử thách nguyên tắc DRY, bạn không cần phải viết lại bất kỳ đoạn mã nào

nhược điểm

  • Cấu trúc lại. You must edit some second number and change some function to code your active
  • Unest quán. Không phải tất cả các phương thức của bạn cần điều này, tức là cuối cùng bạn sẽ có một số hàm sử dụng hàm "gọi" trong khi một số thì không
  • Trong trường hợp bạn có quán nhất và tất cả các phương châm bài đăng của bạn đều có sử dụng chức năng "gọi điện thoại", bạn sẽ làm tăng số lượng chức năng mà bạn phải xử lý
Cách xử lý tốt hơn

Để xử lý những nhược điểm bên trên, hãy tạo một lớp mà có thể tạo ra một yêu cầu có thể thực hiện bất kỳ phương thức nào chúng ta muốn rồi chỉ cần truyền Yêu cầu đó vào làm tham số. Nói cách khác, chúng ta sẽ cố gắng bắt chước những gì mà một biểu mẫu hay một AJAX sẽ làm

Để ví dụ mình sẽ tạo ra một lớp học

{$this->method}[]
3

Trong lớp này chúng ta sẽ định nghĩa một số tham số và truyền vào trong

{$this->method}[]
4 và cuối cùng là hàm
{$this->method}[]
5 để xử lý việc gọi tới một hàm và nhận về phản hồi

Giải pháp này đã giải quyết được một số vấn đề mà trước đây không xử lý được

  • Đầu tiên, nó trở thành một hàm gọi chung hoạt động với bất kỳ phương thức nào nhận được một yêu cầu được bắt đầu - ở bất kỳ lớp nào
  • Thứ hai, nó thực sự gửi một
    {$this->method}[]
    
    6 làm tham số, điều này có thể hoặc không quan trọng đối với chức năng mà bạn đang gọi
  • Thứ ba, bạn không cần phải cấu trúc lại phương thức mà bạn đang cố gọi đến. Trong khoảng thời gian trước chúng ta phải chuyển phần xử lý dữ liệu từ
    {$this->method}[]
    
    6 sang chức năng "gọi" và sau đó truyền dữ liệu sang

Cùng giải thích một chút về phương thức

{$this->method}[]
5 của
{$this->method}[]
9

{$this->method}[]
0

Tại đây, chúng ta đang tạo một phiên bản chứa dịch vụ Laravel và ràng buộc nó với lớp mà bạn đang chọn. Có một số ưu điểm khi bạn sử dụng container dịch vụ bằng cách này

  • Bạn không cần sử dụng từ khóa
    {$this->method}[]
    
    10
  • Nó trả về một thể hiện của lớp mà bạn chỉ có thể sử dụng trong một dòng mã
  • You don't need to import class namespace into in the scope of
    {$this->method}[]
    
    3 information through keyword
    {$this->method}[]
    
    12

Thêm vào đó là các lợi ích khác của vùng chứa dịch vụ

{$this->method}[]

Gọi một phương thức cụ thể bên trong lớp mà chúng ta đã truyền vào. Sử dụng cú pháp {}, chúng ta có thể tự động gọi một phương thức. Vì vậy, nếu class của chúng ta là

{$this->method}[]
13 và method là
{$this->method}[]
14, điều này sẽ tương ứng với
{$this->method}[]
15

{$this->method}[]
1

Chúng ta tạo một Illuminate request từ Symfony Instance. Chúng ta có thể truyền vào

{$this->method}[]
16 - có thể là một
{$this->method}[]
17 tuy nhiên cũng có thể là một Custom FormRequest

{$this->method}[]
1

Sau đó chúng ta có thể trả về bất kỳ phản hồi nào mà phương pháp đó sẽ trả về cho chúng ta. Sau đó, bạn có thể sử dụng phản hồi này để xử lý dữ liệu trả về

Làm cách nào để gọi một chức năng đăng bài trong Laravel?

Chúng ta có thể tạo chức năng “Gọi điện thoại”. Sao chép các phần có thể thao tác của phương thức vào một hàm khác có thể được gọi . Về bản chất, bạn đang tạo một hàm truy xuất dữ liệu từ yêu cầu POST và sau đó gọi hàm thực xử lý dữ liệu bỏ qua dữ liệu dưới dạng tham số.

Làm cách nào để gọi API từ bộ điều khiển trong Laravel?

Nếu bạn muốn gọi url hoặc api bên ngoài trong bộ điều khiển laravel thì chúng ta có thể sử dụng mặt tiền Http của laravel . sử dụng mặt tiền http, chúng ta có thể gọi yêu cầu API bằng GET, POST, PUT, DELETE và cả với các tiêu đề.

Làm cách nào để lấy dữ liệu bài đăng trong Laravel 8?

Tất cả những gì cần thiết là dòng use Illuminate\Support\Facades\Request; . Đối với chỉ dữ liệu bài đăng, Yêu cầu. post[] có thể được sử dụng thay thế.

request[] trong Laravel là gì?

Giới thiệu. Lớp Illuminate\Http\Request của Laravel cung cấp một cách hướng đối tượng để tương tác với yêu cầu HTTP hiện tại đang được ứng dụng của bạn xử lý cũng như truy xuất đầu vào, cookie và tệp đã được gửi cùng với yêu cầu

Chủ Đề