Symfony 5 nhận tất cả các tham số yêu cầu

Mảng này là kết quả cuối cùng của quá trình khớp tuyến. Rõ ràng, bộ định tuyến trả về một mảng với các giá trị ký tự đại diện từ tuyến cộng với các khóa cho tuyến và bộ điều khiển

Nhưng mà. nó thú vị hơn thế một chút. Một cách tuyệt vời để xem cách thực hiện là chơi với một tuyến đường trong YAML. Mở ra config/routes.yaml. Bỏ ghi chú tuyến đường ví dụ và thay đổi đường dẫn thành /playing. Bây giờ, trên trình duyệt của bạn, hãy mở một tab khác và truy cập https. //máy chủ cục bộ. 8000/lần chơi

mục lục. con đường. /đang chơi. dòng 3 - 4

Đó chính xác là những gì chúng tôi mong đợi. _route được đặt thành tên tuyến đường và _controller được đặt thành chuỗi điều khiển cho tuyến đường đó

Nhưng trên thực tế, phím controller trong lộ trình YAML chỉ là phím tắt. Trước Symfony 4, không có khóa controller. Không, để xác định bộ điều khiển, bạn đã thêm khóa defaults và đặt khóa _controller bên dưới khóa đó

mục lục. dòng 2mặc định. _bộ điều khiển. Ứng dụng \ Bộ điều khiển \ Bộ điều khiển mặc định. mục lục

Di chuyển qua và làm mới ngay bây giờ. ồ. Chúng tôi nhận được chính xác cùng một mảng. Đúng, phím controller thực sự chỉ là phím tắt để đặt giá trị mặc định của _controller trên tuyến đường

Đây thực sự là một điểm quan trọng, nhưng để xem tại sao, chúng ta hãy đi xa hơn một chút. Đầu tiên, thêm ký tự đại diện /playing0 vào cuối đường dẫn. Sau đó, tại trình duyệt của bạn, thêm /playing1 vào cuối URL. Và. Vâng. Mảng hiện có khóa /playing2. không ngạc nhiên

mục lục. con đường. /đang chơi/{id}. dòng 3 - 5

Thông thường, mục đích của defaults trên tuyến đường là cung cấp giá trị mặc định cho ký tự đại diện. Nếu chúng ta nói /playing4. và sau đó làm mới, mảng vẫn chứa 5 vì đó là nội dung trong URL. Nhưng nhờ mặc định, bây giờ chúng ta có thể đi đến /playing và. id sử dụng giá trị mặc định /playing6

mục lục. dòng 2mặc định. dòng 4id. 10

Mát mẻ. Nhưng nếu chúng ta chỉ. phát minh ra một chìa khóa mới và đặt nó ở đây?

mục lục. dòng 2mặc định. dòng 4 - 5totally_inventing_this_default. thật

Điều này sẽ không thay đổi cách tuyến đường khớp với nhau, nhưng nó sẽ thay đổi những gì chúng ta nhận được trong mảng. Làm mới. Khóa /playing7 hiện nằm trong mảng được trả về

Vì vậy, đây là câu chuyện đầy đủ về kết quả mà quá trình so khớp tuyến đường trả về. nó trả về 20 giá trị mặc định của tuyến đường và bất kỳ giá trị ký tự đại diện nào trong tuyến đường. cộng với phím _route. chỉ trong trường hợp đó là tiện dụng

Với các chú thích về tuyến đường, nó trông hơi khác một chút, nhưng nó hoàn toàn giống nhau. Chúng tôi có thể thêm khóa defaults và đặt _route3 thành _route4. Quay lại trình duyệt, đóng tab cuối cùng và làm mới trang hiển thị bài viết. Chúng tôi đột nhiên có một khóa _route3. Trên đường đi, hãy loại bỏ thứ defaults đó

dòng 1 - 13class ArticleController mở rộng AbstractController{. dòng 16 - 38chức năng công cộng hiển thị(Bài báo $article, SlackClient $slack). dòng 43 - 64}

Vậy tại sao việc hiểu chính xác kết quả của quá trình so khớp tuyến đường lại quan trọng đến vậy? . Nhưng trước tiên. trở lại _route7, lớp này làm gì với mảng _route8?

Xóa _route9. và hãy làm theo logic. Nó thực hiện một số thao tác ghi nhật ký và. đây rồi. _controller0. Cái này quan trọng

Hãy sao lưu trong giây lát. đối tượng _controller1 có một số thuộc tính công cộng và tất cả chúng - ngoại trừ một. - tương ứng với nội dung nào đó trong yêu cầu HTTP. Ví dụ: _controller2 giữ các tiêu đề yêu cầu HTTP, _controller3 giữ cookie và có những tiêu đề khác như _controller4 để đọc các tham số truy vấn. Điểm mấu chốt là. tất cả những thứ này đề cập đến "các phần" thực của yêu cầu HTTP. Bạn có thể nói chuyện với nhà phát triển Java về các tiêu đề HTTP và họ sẽ biết bạn đang đề cập đến điều gì

Một ngoại lệ là _controller5. Thuộc tính này không tương ứng với bất kỳ phần thực nào của yêu cầu HTTP. Nếu bạn hỏi chính nhà phát triển Java đó

Chào. Các thuộc tính theo yêu cầu của bạn là gì?

Họ sẽ nghĩ bạn dở hơi. Không, các thuộc tính Yêu cầu là thứ hoàn toàn do Symfony phát minh ra. Mục đích của các thuộc tính yêu cầu là nơi bạn có thể lưu trữ dữ liệu về yêu cầu dành riêng cho ứng dụng của bạn. Vì vậy, lưu trữ bộ điều khiển, ví dụ, là một sự phù hợp hoàn hảo. Đó hoàn toàn là một khái niệm của Symfony

Dù sao đi nữa, mảng _route8 từ bộ định tuyến được thêm vào _controller7. cái đó làm gì. làm? . Chẳng bao lâu nữa, một thứ khác sẽ sử dụng dữ liệu này, nhưng tại thời điểm này, đây chỉ là dữ liệu nằm trong yêu cầu

Nó cũng đặt một thuộc tính khác là _controller8. nhưng điều đó không thực sự quan trọng

Vâng. _route7 xong. Kết thúc lớp học đó, đập tay với con mèo của bạn - và quay lại controller0. Như chúng ta đã thấy, có rất nhiều người nghe sự kiện controller1, nhưng cho đến nay, sự kiện quan trọng nhất là _route7. Vậy điều gì đã thay đổi trong hệ thống của chúng ta trước và sau dòng controller3 này? . chỉ các thuộc tính yêu cầu

Trong thực tế, chúng ta hãy xem điều này. Công văn trên, controller4. Sau đó sao chép đó. đổ sau, và controller5. Làm mới trang hiển thị bài viết. Chuẩn rồi. Trước khi chúng tôi gửi sự kiện, các thuộc tính trống. Sau đó? . Một số thứ khác đã được thêm vào bởi những người nghe khác liên quan đến bảo mật. Điều đó không quan trọng đối với chúng tôi - nhưng vẫn thú vị

dòng 1 - 39class HttpKernel thực hiện HttpKernelInterface, TerminableInterface{. dòng 42 - 114hàm riêng handleRaw(Request $request, int $type = self. MASTER_REQUEST). Phản ứng{. dòng 117 - 120dump($request->attributes->all());$this->dispatcher->dispatch($event, KernelEvents. YÊU CẦU);dump($request->attributes->all());die;. dòng 125 - 169}. dòng 171 - 284}

Xóa tất cả mã gỡ lỗi đó

Trước khi chúng ta tìm hiểu cách sử dụng các thuộc tính yêu cầu, tôi muốn cho bạn xem một thứ khá thú vị. Chúng ta sẽ xem xét một tệp bộ đệm. controller9. và sau đó controller0

Tệp này được Symfony tạo tự động và là kết quả cuối cùng của tất cả các tuyến trong ứng dụng của chúng tôi. Tập tin này là điên rồ. Sau khi đọc các tuyến đường của chúng tôi, Symfony tạo một danh sách lớn các biểu thức chính quy và tuyến đường nào sẽ khớp với phần nào và kết xuất chúng vào tệp này. Điều này được sử dụng bởi quá trình so khớp tuyến đường để nó cực kỳ nhanh. Của nó. khá tuyệt vời

Dù sao, tiếp theo. Hãy xem tầm quan trọng của các thuộc tính Yêu cầu đó bằng cách tiếp tục thực hiện phương pháp controller1

Làm cách nào chúng tôi có thể nhận được các tham số yêu cầu trong Symfony?

sử dụng Symfony\Thành phần\HttpFoundation\Request;

Làm cách nào để lấy dữ liệu từ yêu cầu trong Symfony?

Nếu chúng ta gửi một yêu cầu POST với tiêu đề Kiểu nội dung được đặt thành application/json và phần nội dung yêu cầu được đặt thành chuỗi JSON , thì bộ điều khiển Symfony của chúng ta sẽ nhận được .

Làm cách nào để gọi API trong Symfony?

sử dụng Symfony\Thành phần\HttpClient\HttpClient; . tạo ra(); . //api. github. com/repos/symfony/symfony-docs');