在系统(Symfony 2.8)中,对于某些对象我们已经编辑了这个"对象列表和对象上的按钮"详细信息"页。在提交正确的数据后,我的客户突然希望所有表单都重定向到他来自的地方 所以我认为我可以在会话中保存原点,然后重定向,但我想以一种通用的方式来做,就像每一个允许进入"编辑"或"创建"或任何事情,我会这样做:
$this->get('session')->set(
'formOrigin',
[
'route' => $this->get('request')->get('_route'),
'arguments' => ???
]
)
然后在处理来自表单的数据后,从会话中获取原点,如果不是null
return $this->redirectToRoute($formOrigin['route'], $formOrigin['arguments']);
但问题是代码中的???
:)你能在这里给我一个提示吗?
为了澄清,我可以从某个地方获取路由参数作为数组"或者我每次必须自己构建它吗?我可以建造它,但对我来说似乎很难看......
答案 0 :(得分:1)
为什么不在会话中存储refrer
:
$referer = $request->headers->get('referer');
$this->get('session')->set('referer', $referer);
进入对象编辑并在成功提交表单后重定向到该对象。
或者您可以从Route
对象获取$request
参数:
$routeParams = $request->attributes->get('_route_params');
答案 1 :(得分:0)
要做到简单,你可以使用监听器:
创建一个监听您的请求并将路由存储在会话中的侦听器
在您的bundleName / Resources / config / services.yml
中有例子p = hplot(*plot.values())
BUNDLENAME /事件监听/ RedirectListener.php
services:
redirect_listener:
class: BundleName\EventListener\RedirectListener
arguments: ['@service_container']
tags:
- {name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
在处理数据后的控制器中,您可以重定向
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
class RedirectionListener
{
protected $session;
public function __construct(ContainerInterface $containerInterface)
{
$this->session = $containerInterface->get('session');
}
/**
* @param GetResponseEvent $event
*/
public function onKernelRequest(GetResponseEvent $event)
{
$route = $event->getRequest()->attributes->get('_route');
if($this->session->has('route')) $this->session->remove('route');
// Add route in session
$this->session->add('route', $route);
}
}