2011-07-17 34 views

Trả lời

12

Để phát hiện xem yêu cầu có phải là bản chính hay không yêu cầu sử dụng số RequestStack, cần được đưa vào bộ điều khiển của bạn. Ngăn yêu cầu có 3 phương thức hữu ích

getCurrentRequest(); 
getMasterRequest(); 
getParentRequest(); 

getParentRequest() sẽ luôn trả về null nếu yêu cầu hiện tại là chính.

0

dễ dàng, chỉ cần gọi phương thức trên đối tượng getMethod()Request của bạn:

$method = $this->get('request')->getMethod(); 

này sẽ trở lại với phương pháp HTTP yêu cầu hiện tại, ví dụ GET, POST, PUT hoặc DELETE.

+3

Không. Ý tôi là: là yêu cầu chính hoặc yêu cầu phụ này? – Koc

+17

Ah ok, xin lỗi về điều đó. Trong trường hợp đó, bạn sẽ phải móc vào sự kiện 'kernel.request' và kiểm tra xem' $ event-> getRequestType() 'có bằng' HttpKernelInterface :: MASTER_REQUEST' hoặc 'HttpKernelInterface :: SUB_REQUEST' hay không. – igorw

+0

@ strongw, bạn nên cập nhật cho bạn bài đăng với câu trả lời bạn đã đưa ra trong nhận xét của bạn để nhận xét đó có thể được upvoted. Mọi người không upvote một câu trả lời không trả lời câu hỏi. – Quentin

2

Tôi đang tìm kiếm điều này, và có vẻ như nó chỉ được truyền đi, vì vậy dường như không có một nơi nào biết được nó là gì.

Suy nghĩ của tôi để giải quyết điều này sẽ là tạo một trình nghe đơn giản kernel.request chỉ thêm thuộc tính vào yêu cầu. Thô (chưa được kiểm tra) mã bên dưới:

public function onKernelRequest(GetResponseEvent $event) 
{ 
    $event->getRequest()->attributes->set('_request_type', $event->getRequestType()); 
} 

Sau đó, trong bộ điều khiển bạn sẽ có thể làm:

$requestType = $this->getRequest()->attributes->get('_request_type'); 

Một lần nữa đây là chưa được kiểm tra. Bạn sẽ cần phải viết ra các lớp nghe đầy đủ và thêm nó vào tập tin cấu hình dịch vụ, nhưng khác hơn là tôi nghĩ rằng điều này sẽ làm việc.

Các vấn đề liên quan