繁体   English   中英

成功注册后FOSUserbundle呈现为index.html.twig

[英]render to index.html.twig after success registration FOSUserbundle

成功注册后,我将呈现为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”

请查看并告知我该如何解决此错误

最后,我找到了解决方案。 首先,我尝试从registrationController渲染到另一个页面。 如果我不显示此页面上的数据,那也不是完全错误的。 FOSUserBundle的贡献者之一回答了这个渲染问题,他说,我引用:“登录根本不是由FOSUserBundle处理,而是由Symfony安全组件处理。此捆绑包仅用于提供用户管理”,所以我搜索了换个逻辑。 我创建一个监听器。 我在config.yml中将其命名为(projectname / SourcesFiles / app / config / config.yml)

services:
    fos_user.doctrine_registry:
        alias: doctrine
    sdz_user.registration_complet:
        class: Acme\CovoiturageBundle\Services\RegistrationConfirmListener
        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(\FOS\UserBundle\Event\FormEvent $event) {
    $url = $this->router->generate('index');
    $event->setResponse(new RedirectResponse($url));
}

}

您将需要FOSUserBundle的用途:

use FOS\UserBundle\FOSUserEvents
use FOS\UserBundle\Event\UserEvent
use Symfony\Component\EventDispatcher\EventSubscriberInterface
use Symfony\Component\HttpFoundation\RedirectResponse
use Symfony\Component\Routing\Generator\UrlGeneratorInterface

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

namespace Acme\CovoiturageBundle\Services

您看到“ REGISTRATION_SUCCESS”了吗? 我从registraionAction函数的registrationController中获取以下内容:

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

因此,现在尝试通过运行以下命令来测试您的监听器是否正常工作:

php app/console container:debug |  app_user.registration_complet

您将在控制台上收到以下消息:

[容器]服务sdz_user.registration_complet的信息服务ID sdz_user.registration_complet类别Acme \\ CovoiturageBundle \\ Services \\ RegistrationConfirmListener标签-kernel.event_subscriber()范围容器公共是合成否延迟否同步否抽象否完成。

我没有为登录创建解决方案。 此解决方案进行注册。 我认为这将是相同的逻辑。

这取决于您要引用的“ index.htl.twig”文件所在的位置。 我怀疑它在“ default / index.html.twig”中,因此请尝试以下操作:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM