2013-10-11 13 views
14

Tôi hiểu rằng việc sử dụng {% render() %} sẽ tự động buộc một đối tượng yêu cầu mới được gửi đi, nhưng tôi tò mò nếu có cách chuyển yêu cầu gốc làm đối số?Symfony2: trong Twig, vượt qua Yêu cầu với chức năng Render

{% render('some_action', {'originalRequest': app.request}) %} 

này dường như không phải làm bất cứ điều gì cho bộ điều khiển:

public function actionAction($originalRequest = null) 
{ 
    // $originalRequest ends up just being null 
} 

Im giả định của mình vì cách các tuyến đường được thiết lập:

some_action: 
    pattern: /stuff/ 
    defaults: { _controller:SomeApp:Controller:action } 

Tôi muốn tưởng tượng dữ liệu giống như không thể rõ ràng là ngoài URL, vì vậy một số loại cách để truyền dữ liệu đến URL có thể hiển thị, bất kỳ điều gì?

EDIT (Solution)

Giải pháp là khá đơn giản trong thời gian dài, như Petre Pătraşc dưới đây đã chứng minh, rằng trong cành, tất cả tôi cần làm là gọi Controller trực tiếp, và với cách tiếp cận đó Tôi có thể chuyển vào các đối tượng (như là một đối tượng Request) và các mảng, thay vì các giá trị văn bản trong một URL.
Để thực hiện gần như cùng một ý tưởng trong bộ điều khiển, sử dụng phương thức forward() từ bộ định tuyến, sẽ cho phép các hiệu ứng tương tự mà không cần phải chuyển hướng người dùng đến trang khác.

Trả lời

7

Nếu tôi hiểu đúng, bạn đang tìm kiếm này:

{% render "MyBundle:Controller:someAction" with { 'originalRequest' : app.request } %} 
+0

Cuối cùng tôi đã xem qua câu trả lời của tôi chỉ khi bạn đăng bài này haha ​​đây là vé mặc dù! Không sử dụng Router, chỉ cần gọi trực tiếp bộ điều khiển – RedactedProfile

+0

Tôi tò mò, bạn có đang nói về việc sử dụng forward() hay không? Nó sẽ là tốt đẹp để cập nhật các câu hỏi ban đầu với giải pháp của bạn, vì nó có thể là một trường hợp cạnh và giúp đỡ một ai đó! –

+0

Twig chỉ cần gửi một yêu cầu lỗi khi thử điều này – skerit

7

sử dụng render chức năng kết quả là

{{ render(controller('MyBundle:ControllerName:example', {'originalRequest': app.request})) }} 

và sau đó trong bộ điều khiển

public function exampleAction(Request $originalRequest) 
{ 
    // do something 
} 
+0

Thú vị để lưu ý tên tham số của phương thức phải giống nhau, quá – skerit

-1

bạn Kể từ Symfony 2.4 bạn có thể truy cập yêu cầu ban đầu thông qua request_stack. Điều này tránh sự cần thiết phải tạo một tham số phương thức mới.

function exampleAction() { 
    $request = $this->get('request_stack')->getMasterRequest(); 
    //do something 
} 

Sử dụng này một cách cẩn thận vì nó làm cho bạn tiểu yêu cầu không phù hợp với ESIS/proxy ngược (nơi một tiểu yêu cầu cũng là một yêu cầu chủ) http://symfony.com/blog/new-in-symfony-2-4-the-request-stack

+0

Vui lòng giải thích những gì sai với câu trả lời này trước khi bỏ phiếu xuống để tôi có thể phê duyệt. – lookbadgers

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