如何在其他页面中实现FOSUserBundle寄存器表单

时间:2014-06-04 10:47:41

标签: php forms symfony fosuserbundle

所以,我正在使用FOSUserBundle,我想在弹出模块中实现注册表单,当用户点击按钮以便他可以注册时,该弹出模块会出现。

我已经有一个单独的注册页面,我设法扩展了这样的注册表单......

<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST">

                {{ form_widget(form) }}

                <button type="Submit">{{ 'registration.submit'|trans }}</button>

 </form>

但这只有效,因为我有与FOSUserBundle相同的文件夹结构(views / registration / register.html.twig),这是我知道扩展注册表格或任何表格的唯一方法。 FOSUserBundle,但现在我想添加这个模块的表单,当我这样做时......

<div class="panel panel-default">
                <div class="panel-heading">
                    <h4 class="panel-title">
                        <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Register</a>
                    </h4>
                </div>
                <div id="collapseOne" class="panel-collapse collapse in">
                    <div class="panel-body">
                        <form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST">

                            {{ form_widget(form) }}

                            <button type="Submit">{{ 'registration.submit'|trans }}</button>

                        </form>
                    </div>
                </div>
            </div><!-- register -->

它不起作用,因为它位于不同的位置。

我想全局使用注册表单,以便我可以在任何我想要的页面中调用该弹出模块。 不,我该怎么做?

1 个答案:

答案 0 :(得分:1)

如果我做对了,你需要做的就是在你的网站上创建一个带有reg形式的弹出窗口。

我会这样做:在你的布局模板中你创建一些块,比如

{% block modal_registration %}
    <div class="panel panel-default">
        {{ render(controller('UrBundle:Registration:regForm')) }}
    </div><!-- register -->
{% endblock %}

这可以很容易地用一些树枝延伸代替。

然后,创建用于渲染该块的ur控制器,它应该类似于:

class RegistrationController extends ContainerAware
{
    public function regFormAction()
    {      

        /** @var  \FOS\UserBundle\Form\Factory\FactoryInterface $formFactory*/
        $formFactory = $this->container->get('fos_user.registration.form.factory');        

        $form = $formFactory->createForm();

        return $this->container->get('templating')->renderResponse('UrBundle:Registration:register.html.twig', array(
            'form' => $form->createView(),
        ));
    }
 }

正如你所见,表格工厂只是一项服务,所以你可以通过你的容器访问它。

此块的模板可能与您的模板类似:

            <div class="panel-heading">
                <h4 class="panel-title">
                    <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Register</a>
                </h4>
            </div>
            <div id="collapseOne" class="panel-collapse collapse in">
                <div class="panel-body">
                    <form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST">

                        {{ form_widget(form) }}

                        <button type="Submit">{{ 'registration.submit'|trans }}</button>

                    </form>
                </div>
            </div>

示例真的很简单,你应该做一些工作,如果你将面临更多的问题。