Ответ 1
Если я правильно понимаю, вы ищете следующее:
{% render "MyBundle:Controller:someAction" with { 'originalRequest' : app.request } %}
Я понимаю, что использование {% render() %}
автоматически заставляет новый объект запроса отправляться, но им любопытно, есть ли способ передать в исходном запросе в качестве аргумента?
{% render('some_action', {'originalRequest': app.request}) %}
Это ничего не делает для контроллера:
public function actionAction($originalRequest = null)
{
// $originalRequest ends up just being null
}
Im принимает его из-за способа установки маршрута:
some_action:
pattern: /stuff/
defaults: { _controller:SomeApp:Controller:action }
Я бы предположил, что данные вроде этого не могут быть отделены от URL-адреса, поэтому какой-то способ передачи данных в отображаемый URL-адрес вообще?
EDIT (решение)
Решение было довольно простым в долгосрочной перспективе, как продемонстрировал ниже Petre Pătraşc, что в Twig все, что мне нужно было сделать, это вызвать Controller напрямую, и с этим подходом я могу передать объекты (такие как объект Request ) и Массивы вместо текстовых значений в URL.
Чтобы выполнить примерно ту же идею в контроллере, используя метод forward()
от маршрутизатора, разрешите подобные эффекты без необходимости перенаправления пользователя на другую страницу.
Если я правильно понимаю, вы ищете следующее:
{% render "MyBundle:Controller:someAction" with { 'originalRequest' : app.request } %}
используйте в качестве результата функцию рендеринга
{{ render(controller('MyBundle:ControllerName:example', {'originalRequest': app.request})) }}
а затем в вашем контроллере
public function exampleAction(Request $originalRequest)
{
// do something
}
С Symfony 2.4 вы можете получить исходный запрос через request_stack. Это позволяет избежать необходимости создания нового параметра метода.
function exampleAction() {
$request = $this->get('request_stack')->getMasterRequest();
//do something
}
Используйте это внимательно, так как ваши подзапросы несовместимы с ESI/обратными прокси (где подчиненный запрос также является основным запросом) http://symfony.com/blog/new-in-symfony-2-4-the-request-stack