簡體   English   中英

Symfony2 + FOSUserBundle注冊表不提交,只重新加載

[英]Symfony2 + FOSUserBundle registration form not submitting, only reloading

在這個問題上,我已經在我的智慧結束了幾天,我似乎無法找到問題。

概述:

  • 我正在使用FOSUserBundle作為用戶管理器構建Symfony2網站,並將Propel作為數據庫提供程序。
  • 我已成功覆蓋登錄模板,我可以從模態視圖成功登錄和注銷。
  • 我在schema.xml中添加了6個自定義字段,模型正確構建(即我可以在列表用戶管理器中查詢這些字段)。
  • 我可以在默認路由中成功注冊為新用戶,以便在我覆蓋的表單上進行注冊,並且數據會按預期顯示在我的數據庫中。

問題:

我已將注冊表單移動到我的“用戶管理器儀表板”中的模態視圖中的最終位置。 我的表單正確加載和顯示,但無論出於何種原因拒絕將數據提交給控制器進行處理。 相反,它只是加載注冊的默認路由('/ register')並再次顯示表單,但沒有任何我的css,js或基本樹枝模板。 當我以該表單重新輸入信息時,它只是重新加載,沒有任何信息進入數據庫。

我確信問題在於(或兩者)我如何提交表格或我如何歸類表格。

注意我已將類的名稱更改為法定的AcmeBundle,原因很明顯:)

任何人都可以對此有所了解嗎? 我真的要崩潰這個問題了!

提前謝謝你:D

編輯

我現在認為這可能是一個路由問題,因為我已經驗證了我的表單構建並正確收集了它的所有值?

應用程序/ config.yml

#FOS UserBundle Configuration
fos_user:
    db_driver: propel # other valid values are 'mongodb', 'couchdb' and 'propel'
    firewall_name: main
    user_class: FOS\UserBundle\Propel\User
    registration:
        form:
            type: acme_user_registration

#Services
services:
    acme_user.registration.form.type:
        class: Acme\UserBundle\Form\Type\RegistrationFormType
        arguments: [%fos_user.model.user.class%]
        tags:
            - { name: form.type, alias: acme_user_registration }
    acme_user.form.handler.registration:
            class: Acme\UserBundle\Form\Handler\RegistrationFormHandler
            arguments: ["@fos_user.registration.form", "@request", "@fos_user.user_manager", "@fos_user.mailer", "@fos_user.util.token_generator"]
            scope: request

app / routing.yml是根據文檔的標准FOSUserBundle配置

# FOSUserBundle Routing
fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

fos_user_profile:
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
    prefix: /profile

fos_user_register:
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
    prefix: /register

fos_user_resetting:
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
    prefix: /resetting

fos_user_change_password:
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
    prefix: /profile

極致/ UserBundle /控制器/ RegistrationController.php

<?php

namespace Acme\UserBundle\Controller;

use FOS\UserBundle\Controller\RegistrationController as BaseController;
use Symfony\Component\HttpFoundation\Response;


class RegistrationController extends BaseController
{
    public function render($view, array $parameters = array(), Response $response = null)
    {
        return parent::render($view, $parameters, $response);
    }

}

Acme / AdminBundle / Resources / views / _addUser.html.twig這是我調用模態的地方

{% include "FOSUserBundle::layout.html.twig" %}

<!-- Modal -->
<div id="registerUser" class="reveal-modal xlarge"  data-reveal>

    <h2 align="center">Add New User</h2>
    <h6 align="center" style="color: red">All Fields are Required</h6>

    {% block fos_user_content %}
        {% render url('fos_user_registration_register') %}
    {% endblock %}

    <a class="close-reveal-modal">&#215;</a>

</div>

app / Resources / FOSUserBundle / views / Registration / register.html.twig根據文檔覆蓋

{% block fos_user_content %}
    {% include 'FOSUserBundle:Registration:register_content.html.twig' %}
{% endblock %}

app / Resources / FOSUserBundle / views / Registration / register_content.html.twig根據文檔覆蓋

<form data-abide class="fos_user_registration_register" action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="post" >
            <fieldset>
                <legend>Personal Details</legend>

                {# First Name #}
                <div>
                    <label for="form_first_name">First Name</label>
                    <input type="text" id="form_first_name" name="form[first_name]" required pattern="[a-zA-Z]+"/>
                    <small class="error">This field is required</small>
                </div>

                {# Last Name #}
                <div>
                    <label for="form_last_name">Surname</label>
                    <input type="text" id="form_last_name" name="form[last_name]" required pattern="[a-zA-Z]+">
                    <small class="error">This field is required</small>
                </div>

                etc...
                etc...
                etc...

            </fieldset>
            <div>
                <input type="submit" value="{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}" />
            </div>
</form>

你必須改變你的register_content.html.twig:

{{ form_start(form, {'attr': {'class': 'fos_user_registration_register', 'id': 'register-form'} }) }}
{{ form_label(form.username) }}
{{ form_errors(form.username) }}        
{{ form_widget(form.username) }}
{{ form_label(form.email) }}
{{ form_errors(form.email) }}       
{{ form_widget(form.email) }}
{{ form_label(form.plainPassword.first, null, {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
        {{ form_errors(form.plainPassword.first) }}
         {{ form_widget(form.plainPassword.first, { 'attr': {'class': 'form-control'} }) }}
         {{ form_label(form.plainPassword.second, null, {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
        {{ form_errors(form.plainPassword.second) }}

         {{ form_widget(form.plainPassword.second, { 'attr': {'class': 'form-control'} }) }}
         <input type="submit" value="{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}" />

         {{ form_rest(form) }}

這適用於我。你應該看到有關它將幫助你的表格的枝條文件。

register_content的摘錄中,沒有明確地介紹form_rest函數的包含(在“surname”字段之后有etc. )。

{{ form_rest(form) }}

調用此函數會負責添加所需的隱藏字段,例如負責防止crsf攻擊的字段。

此外,沒有包含對form_errors的調用會阻止您意識到是否存在與任何字段相關的驗證錯誤(例如前面提到的csrf令牌,如果它是無效的)。

{{ form_errors(form) }}

為了澄清可能出現的問題,您可能希望訪問表單提交生成的日志。 例如,當依賴於您的(Symfony2)開發環境時:

tail -fn 100 app/logs/dev.log 

您可能會發現某個級別的錯誤,告訴您問題解決會話的下一階段可能是什么。

如果需要,我們可以進行聊天以進行調試。

這聽起來像路由問題。 我通過不將它們包含在我的包中來覆蓋FOSUser路由。 相反,我有自己的路徑與FOSUser名稱,以便當FOSUser表單調用FOSUser路由時,此路由調用我的自定義控制器。 在我的MyUserBundle / Resources / config / routing / routing.yml中,我有:

fos_user_registration_register:
    path:      /
    defaults:  { _controller: MyUserBundle:Register:register }

您可以通過完成新的注冊過程來檢查調用的路由和控制器,然后轉到分析器欄上的單擊,查看最近的10個請求。 它將顯示匹配的路由和調用的控制器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM