Php 如果未设置会话,则重定向特定路由
如果未设置会话,如何将用户重定向到主页面?这里的会话只是他们在输入字段中输入的名称 如果我在控制器的方法中使用条件检查会话,代码将重复。是否有一种方法可以像在Laravel中那样对路线进行分组并应用配置 重复的代码:Php 如果未设置会话,则重定向特定路由,php,symfony,routing,Php,Symfony,Routing,如果未设置会话,如何将用户重定向到主页面?这里的会话只是他们在输入字段中输入的名称 如果我在控制器的方法中使用条件检查会话,代码将重复。是否有一种方法可以像在Laravel中那样对路线进行分组并应用配置 重复的代码: if( $this->get('session')->get('fbSession')) return $this->redirectToRoute('app_home'); 如果要对指定的路由执行此检查,可以为内核请求事件实现事件侦听器 参数
if( $this->get('session')->get('fbSession'))
return $this->redirectToRoute('app_home');
如果要对指定的路由执行此检查,可以为内核请求事件实现事件侦听器 参数.yml
routes_list:
- app_messages
- app_profile
- app_something
services.xml
<service id="app.session_listener" class="AppBundle\EventListener\SessionListener">
<tag name="kernel.event_subscriber"/>
<argument type="service" id="router"/>
<argument>%routes_list%</argument>
</service>
%路线列表%
SessionLisener.php
<?php
namespace AppBundle\EventListener;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Routing\RouterInterface;
class SessionListener implements EventSubscriberInterface
{
/**
* @var RouterInterface
*/
private $router;
/**
* @var array
*/
private $routesList;
/**
* @param RouterInterface $router
* @param array $routesList
*/
public function __construct(RouterInterface $router, $routesList)
{
$this->router = $router;
$this->routesList = $routesList;
}
static public function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => array(array('onKernelRequest', -50)),
];
}
public function onKernelRequest(GetResponseEvent $event)
{
if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
return;
}
$request = $event->getRequest();
if (! in_array($request->get('_route'), $this->routesList)) {
return;
}
if ($request->getSession()->has('fbSession')) {
$event->setResponse(new RedirectResponse($this->router->generate('app_home')));
}
}
}
你能发布你尝试过的代码吗?它只是重复而已?@Jon question更新了。