主页上的部分用户注册(索引)

时间:2015-03-15 22:01:03

标签: php symfony registration fosuserbundle user-registration

我正在使用Symfony2 2.6.4和FOS用户包(主),我很难尝试将部分注册从主页传递到注册页面。

目标

我希望用户在主页上启动并填写一些信息并按提交。我希望将用户传递到注册页面并预先填写他们已在首页填写的项目。

我尝试过的事情:
我不确定什么是可行的,并且已经花了太多时间在这上面。我尝试扩展注册控制器,但在我开始解决问题之前我遇到了错误,所以我停了下来。我最后的想法是将会话中的变量传递给重写的注册表单类型,看看我是否可以在那里预先填充它。

以前有人做过这样的事吗?他们肯定不会让事情变得简单。

1 个答案:

答案 0 :(得分:0)

归功于@NawfalSerrar感谢您的想法。我很近但不够近!

所以我最终做的就是这个。

这是执行该操作的控制器操作。

/**
 * @Route("/", name="Home")
 */
public function indexAction(Request $request)
{
    $form = $this->createForm(new RegisterFormType());

    $form->handleRequest($request);

    if ($form->isValid()) {
        $data = $form->getData();
        $user = new User();
        $session = $this->get('session');

        $registration = array();
        $registration['firstName'] = $data['first'];
        $registration['lastName'] = $data['last'];
        $registration['middleInit'] = $data['middle'];
        $registration['email'] = $data['email'];
        $session->set('registration', $registration);

        return $this->redirect($this->generateUrl("fos_user_registration_register"));
    }
    return $this->render('Bundle:Page:index.html.twig', array(
        'form' => $form->createView(),
    ));
}

然后是前端的表格。

{{ form_start(form,{'attr': {'class': 'reg-page'}}) }}
  <div class="reg-header">
      <h1>Get Started!</h1>
      <p>Already Signed Up? Click <a href="page_login.html" class="color-green">Sign In</a> to login
          your account.</p>
  </div>
  {{ form_errors(form) }}
  <div class="row">
      <div class="col-sm-6">
          {{ form_label(form.first) }}
          {{ form_widget(form.first, {'attr': {'class': 'form-control margin-bottom-10'}}) }}
      </div>
      <div class="col-sm-6">
          {{ form_label(form.middle) }}
          {{ form_widget(form.middle, {'attr': {'class': 'form-control margin-bottom-10'}}) }}
      </div>
      <div class="col-sm-6">
          {{ form_label(form.last) }}
          {{ form_widget(form.last, {'attr': {'class': 'form-control margin-bottom-10'}}) }}
      </div>
  </div>
  {{ form_label(form.email) }}
  {{ form_widget(form.email, {'attr': {'class': 'form-control'}}) }}
  <div class="row">
      <div class="col-lg-6 text-right">
          {{ form_widget(form.save, {'attr': {'class': 'btn-u'}}) }}
      </div>
  </div>
{{ form_end(form) }}

注册页面如下所示。

{% extends '::base.html.twig' %}

{% block body %}
    {% set tokens = app.session.get('registration') %}
    {% if tokens['firstName'] is defined %}
        {% set firstName = tokens['firstName'] %}
    {% endif %}
    {% if tokens['middleInit'] is defined %}
        {% set middleInit = tokens['middleInit'] %}
    {% endif %}
    {% if tokens['lastName'] is defined %}
        {% set lastName = tokens['lastName'] %}
    {% endif %}
    {% if tokens['email'] is defined %}
        {% set email = tokens['email'] %}
    {% endif %}

    {{ form_start(form) }}
    {{ form_errors(form) }}

    {{ form_label(form.firstName, 'First Name', {label_attr: {class: 'foo'}}) }}
    {% if firstName is defined %}
        {{ form_widget(form.firstName, { attr: {class: 'TestClass'}, value : firstName  }) }}
    {% else %}
        {{ form_widget(form.firstName, { attr: {class: 'TestClass'} }) }}
    {% endif %}

    {{ form_label(form.middleInitial) }}
    {% if middleInitial is defined %}
        {{ form_widget(form.middleInitial, { attr: {class: 'TestClass'}, value : middleInit }) }}
    {% else %}
        {{ form_widget(form.middleInitial, { attr: {class: 'TestClass'}}) }}
    {% endif %}

    {{ form_label(form.lastName) }}
    {% if lastName is defined %}
        {{ form_widget(form.lastName, { attr: {class: 'TestClass'}, value : lastName }) }}
    {% else %}
        {{ form_widget(form.lastName, { attr: {class: 'TestClass'}}) }}
    {% endif %}

    {{ form_label(form.email) }}
    {% if email is defined %}
        {{ form_widget(form.email, { attr: {class: 'TestClass'}, value : email }) }}
    {% else %}
        {{ form_widget(form.email, { attr: {class: 'TestClass'}}) }}
    {% endif %}
    {{ form_label(form.plainPassword.first) }}
    {{ form_widget(form.plainPassword.first) }}
    {{ form_label(form.plainPassword.second) }}
    {{ form_widget(form.plainPassword.second) }}
    <div>
        <input type="submit" value="{{ 'registration.submit'|trans }}"/>
    </div>
    {{ form_end(form) }}
{% endblock %}

希望这有帮助!