Symfony2 - 获取或创建路由的参数数组?

时间:2016-10-19 14:04:17

标签: php symfony session routing

在系统(Symfony 2.8)中,对于某些对象我们已经编辑了这个"对象列表和对象上的按钮"详细信息"页。在提交正确的数据后,我的客户突然希望所有表单都重定向到他来自的地方 所以我认为我可以在会话中保存原点,然后重定向,但我想以一种通用的方式来做,就像每一个允许进入"编辑"或"创建"或任何事情,我会这样做:

$this->get('session')->set(
    'formOrigin', 
    [
        'route' => $this->get('request')->get('_route'),
        'arguments' => ???
    ]
)

然后在处理来自表单的数据后,从会话中获取原点,如果不是null

return $this->redirectToRoute($formOrigin['route'], $formOrigin['arguments']);

但问题是代码中的??? :)你能在这里给我一个提示吗?

为了澄清,我可以从某个地方获取路由参数作为数组"或者我每次必须自己构建它吗?我可以建造它,但对我来说似乎很难看......

2 个答案:

答案 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);
    }



}