[英]Symfony2 + FOSUserBundle registration form not submitting, only reloading
在這個問題上,我已經在我的智慧結束了幾天,我似乎無法找到問題。
概述:
問題:
我已將注冊表單移動到我的“用戶管理器儀表板”中的模態視圖中的最終位置。 我的表單正確加載和顯示,但無論出於何種原因拒絕將數據提交給控制器進行處理。 相反,它只是加載注冊的默認路由('/ 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">×</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.