在成功注册FOSUserbundle后渲染到index.html.twig



注册成功后,我将渲染到index.html.twig

所以在类RegistrationController的函数registerAction中,我默认有:

return $this->render('FOSUserBundle:Registration:register.html.twig', array(
'form' => $form->createView(),
));

所以我把它改成:

return $this->render('AcmeCovoiturageBundle:Index:index.html.twig'), array(
'form' => $form->createView(),
));

但这导致了错误,因为我在index.html.twig中有来自数据库的信息。

所以我把它改成:

return $this->render(controller("AcmeCovoiturageBundle:Index:index"), array(
'form' => $form->createView(),
));

但我有这个错误:试图从命名空间"FOS\UserBundle\controller"调用函数"controller">

请查看它并通知我如何解决这个错误

最后,我找到了一个解决方案。在First中,我尝试从registrationController呈现到另一个页面。如果我没有在这个页面上显示数据,这并不是完全错误的。FOSUserBundle的一位贡献者回答了这个渲染的问题,他说:"登录根本不是由FOSUserBundle处理的,而是由Symfony安全组件处理的。这个捆绑包只提供用户管理。"所以我寻找另一种逻辑。我创造了一个倾听者。我在config.yml(projectname/SourcesFiles/app/config/config.yml)中命名了它

services:
fos_user.doctrine_registry:
alias: doctrine
sdz_user.registration_complet:
class: AcmeCovoiturageBundleServicesRegistrationConfirmListener
arguments: [@router]
tags:
- { name: kernel.event_subscriber }

因此侦听器将侦听来自symfony核心的事件订阅者。之后,在捆绑包中添加一个文件夹,并添加一个名为RegistrationConfirmListener:的php类

class RegistrationConfirmListener implements EventSubscriberInterface {
private $router;
public function __construct(UrlGeneratorInterface $router) {
$this->router = $router;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents() {
return array(
FOSUserEvents::REGISTRATION_SUCCESS  => 'onRegistrationSuccess'
);
}
public function onRegistrationSuccess(FOSUserBundleEventFormEvent $event) {
$url = $this->router->generate('index');
$event->setResponse(new RedirectResponse($url));
}

}

您将需要使用FOSUserBundle:

use FOSUserBundleFOSUserEvents
use FOSUserBundleEventUserEvent
use SymfonyComponentEventDispatcherEventSubscriberInterface
use SymfonyComponentHttpFoundationRedirectResponse
use SymfonyComponentRoutingGeneratorUrlGeneratorInterface

请注意,如果您不将名称空间放在顶部,symfony就无法识别您的类。

namespace AcmeCovoiturageBundleServices

你看到"REGISTRATION_SUCCESS"了吗?我从注册中获取这个控制器从功能注册操作:

$dispatcher->dispatch(FOSUserEvents::**REGISTRATION_COMPLETED**, new FilterUserResponseEvent($user, $request, $response));

所以,现在试着通过运行以下命令来测试你的监听器是否工作:

php app/console container:debug |  app_user.registration_complet

你会在控制台上收到这样的消息:

[container]服务sdz_user.registration_complet的信息服务Id sdz_user.registration_complet类Acme\CoiturageBundle\Services\RegistrationConfirmListener标记-kernel.event_subscriber()作用域容器公开是合成no懒惰不同步否摘要编号完成。

我没有为登录制定解决方案。此解决方案用于注册。我认为这将是同样的逻辑。

这取决于您所引用的"index.htl.twitch"文件的位置。我怀疑它在"default/index.html.titch"中,所以试试这个:

return $this->render('default/index.html.twig'), array(
'form' => $form->createView(),
));

实际路径是:app/Resources/views/default/index.html.twig

最新更新