用户尝试在成功登录后将打开urlhttp://example.com/page1?param=value
默认身份验证重定向到该网址,将http://example.com/login
其重定向到http://example.com/page1?param=value
该网址是可以的。
问题是,我可以\在哪里(我应该重新定义什么,在哪里)重定向到http://example.com/login?param=value
。我需要登录表单的重定向手册(我的自定义类)(我想编辑url)。
讨厌symfony,无论如何找到解决方案:
namespace some\lib;
class AuthenticationListener
{
/**
* Change some data in response before it fires up.
*
* @param FilterResponseEvent $event
*/
public function onResponse(FilterResponseEvent $event)
{
$response = $event->getResponse();
if ($response instanceof RedirectResponse) {
/** @var RedirectResponse $response */
$parsedUrl = parse_url($response->getTargetUrl());
if (!empty($parsedUrl['path'])) {
$matchedRoute = $this->router->match($parsedUrl['path']);
if (!empty($matchedRoute['_route']) && $matchedRoute['_route'] == 'login') {
$layout = $event->getRequest()->query->get('layout');
if ($layout) {
$response = $event->getResponse(); // response that should be fired up (redirect to url)
$responseUrl = $response->getTargetUrl();
$responseUrl .= is_int(strpos('?', $responseUrl)) // add layout to redirect url
? '&layout=' . $layout
: '?layout=' . $layout;
$response->setTargetUrl($responseUrl);
}
}
}
}
}
// ... other code
添加到services.yml:
auth_listener:
class: \some\lig\AuthenticationListener
arguments: [] # inject yours
tags:
# some other definitions
- { name: kernel.event_listener, event: kernel.response, method: onResponse }
只有这样(afaik),我们才能从prev添加参数。网址(目标)到下一个网址(重定向到登录)。
因此,我们RedirectResponse
在内核级别进行了检查。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句