Разница между $this - >render и $this - >redirect Symfony2

в чем разница между $this->render и $this->redirect. Есть ли способ передать аргументы с $this - >render, как я делаю с $this - >redirect

return $this->render('MedicineUserBundle:User:home.html.twig', array(
                 'info'      => $all,));

могу ли я сделать что-то вроде этого: -

return $this->redirect($this->generateUrl('MedicineUserBundle_login', array(
             'info'      => $all,)));

или есть другой способ передать значения с помощью $this - > redirect в файл веточки шаблона.

и еще один вопрос, Как я могу изменить url с $this->redirect, например, если мне не нужно передавать какие-либо значения в файл шаблона, я могу сделать так упомянутый выше рендер приведет меня к такой странице, как localhost/myproject / home но $->this->redirect выполнит контроллер, но url-адрес будет таким же, как localhost/myproject/. Есть ли в любом случае я могу перенаправить на другой url, используя redirect

1 ответов


Redirect ()

Redirect выполняет перенаправление 301 или 302 на указанный маршрут / местоположение. Вы можете использовать это, чтобы передать полный URL, я считаю. Использование этого метода приведет к изменению URL-адреса в адресной строке.

поскольку Redirect использует простой заголовок 301/302 для перенаправления, нет способа передать параметры шаблона в новое местоположение, кроме как по URL-адресу, как вы сделали бы с любым контроллером или URL-адресом.

Render ()

рендер просто отображает файл шаблона, который вы ему указываете, в качестве ответа на текущий запрос. При этом вы можете передать свой массив параметров шаблона как обычно.

вперед()

существует также Forward, который будет пересылать запрос другому контроллеру, внутренне отправляя этот ответ контроллеров обратно в качестве ответа на текущий запрос без каких-либо перенаправлений. С помощью этого метода перенаправляет запрос внутренне, не изменяя URL-адрес в адресе бар.

ключевое различие здесь между рендерингом и перенаправлением заключается в том, что рендеринг является частью системы просмотра и поэтому может передавать параметры в tempaltes. Redirect является частью системы контроллера и ничего не знает о представлении. Вы можете передать параметры в маршрут или URL-адрес, на который вы перенаправляете, но целевое местоположение должно что-то сделать с ними, чтобы передать их в представление.