我的symfony应用程序处理多个“博客”(多站点wordpress样式)
我不是要求一个完整的解决方案,你能告诉我我应该研究哪些类/概念吗?
我认为或者听众+ entryPoints很多但是并没有真正了解它是如何工作的。
在我看来,这需要认证==>重定向到登录的东西在symfony中非常精确地编码。
ps:我正在使用fosUserBundle并尝试覆盖尽可能少的捆绑和关于防火墙。
我希望实现的流程:
答案 0 :(得分:0)
在选民中发送自定义事件。在该事件的事件监听器中设置对RedirectResponse
答案 1 :(得分:0)
确定,
对于我的第一次测试它似乎工作,但我需要进行广泛测试,以确保防火墙监听器不会弄乱我的进程(我不应该这样认为)
以下是我如何定义我的听众。
route_access_listener:
class: [...]\RouteAccessListener
arguments:
- @service_container
tags:
- { name: kernel.event_listener, event: routeAccessRedirect, method: onCustomRouteAccess }
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
以下是我的监听器的实现:
[...]
public function onKernelRequest(GetResponseEvent $event)
{
if($this->response)
$event->setResponse($this->response);
}
public function onCustomRouteAccess(RouteAccessEvent $event)
{
$type = $event->getType();
switch($type){
case RouteAccessManager::DR_IS_USER_OF_OTHER_BLOG:
$redirectPath = 'link_to_blog';
break;
case RouteAccessManager::DR_BLOG_CLOSED:
$redirectPath = 'info_closed_blog';
break;
case RouteAccessManager::DR_PRIVATE_BLOG:
$redirectPath = 'info_private_blog';
break;
case RouteAccessManager::DR_USER_NOT_ENABLED_BLOG:
$redirectPath = 'info_not_enabled_on_blog';
break;
case RouteAccessManager::DR_INVALID_HOSTNAME:
$redirectPath = 'info_invalid_hostname';
break;
}
$url = $this->container->get('router')->generate($redirectPath);
$this->response = new RedirectResponse($url);
}