我遇到了Symfony的问题。我创建我的表单,然后添加一个提交按钮,但我的表单始终无效。当我点击按钮时,它似乎没有任何反应......我尝试所有的方法来查看是否有错误但是没有......我已经尝试过这个解决方案,看看我是否已经有错误:Symfony2: my form returns false from isValid() but empty array for getErrors() from unique constraint condition。这是我的PHP代码:
public function addAction(Request $request) {
$user = new User();
// On ajoute les champs de l'entité que l'on veut à notre formulaire
$form = $this->get('form.factory')->createBuilder('form', $user)
//->setAction($this->generateUrl('testRegister'))
->add('email', 'text')
->add('name', 'text')
->add('firstname', 'text')
->add('login', 'text')
->add('password', 'password')
->add('save', 'submit')
->getForm()
;
// On fait le lien Requête <-> Formulaire
// À partir de maintenant, la variable $user contient les valeurs entrées dans le formulaire par le visiteur
$form->handleRequest($request);
if (!$form->isValid()) {
print_r('Form is not valid...');
print_r((string) $form->getErrors());
}
// On vérifie que les valeurs entrées sont correctes
if ($form->isValid()) {
print_r('It works !');
// On enregistre notre objet dans la base de donnée
$uri = "http://192.168.128.13:8081/DumontPerat/sharesite/person/";
//On encode les données
$data = array(
'name' => $user->name,
'firstname' => $user->firstname,
'login' => $user->login,
'password' => $user->password,
'email' => $user->email,
'isAdmin' => $user->isAdmin,
'status' => $user->status
);
$response = \Httpful\Request::post($uri)
->sendsJson()
->body($data)
->send();
// On redirige vers la page suivante
return $this->render('ShareSiteGeneralBundle:Default:registerEnd.html.twig');
}
// On passe la méthode createView() du formulaire à la vue
// afin qu'elle
// puisse afficher le formulaire toute seule
return $this->render('ShareSiteGeneralBundle:Default:register.html.twig', array(
'form' => $form->createView(),
));
}
这是我的观点(树枝):
{%extends '::base.html.twig'%}
{%block title%}Registration{%endblock%}
{%block body%}
<h3>Registration</h3>
<div class="well">
{{ form_start(form, {'attr': {'class': 'form-horizontal'}}) }}
{# Les erreurs générales du formulaire. #}
{{ form_errors(form) }}
<div class="form-group">
{# Génération du label. #}
{{ form_label(form.name, "Lastname :", {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
{{ form_errors(form.name) }}
<div class="col-sm-4">
{# Génération de l'input. #}
{{ form_widget(form.name, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
<div class="form-group">
{{ form_label(form.firstname, "Firstname :", {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
{{ form_errors(form.firstname) }}
<div class="col-sm-4">
{{ form_widget(form.firstname, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
<div class="form-group">
{{ form_label(form.email, "Email :", {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
{{ form_errors(form.email) }}
<div class="col-sm-4">
{{ form_widget(form.email, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
<div class="form-group">
{{ form_label(form.login, "Login :", {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
{{ form_errors(form.login) }}
<div class="col-sm-4">
{{ form_widget(form.login, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
<div class="form-group">
{{ form_label(form.password, "Password :", {'label_attr': {'class': 'col-sm-3 control-label'}}) }}
{{ form_errors(form.password) }}
<div class="col-sm-4">
{{ form_widget(form.password, {'attr': {'class': 'form-control'}}) }}
</div>
</div>
<div class="form-group">
{{ form_widget(form.save, {'attr': {'class': 'btn btn-primary'}}) }}
</div>
</div>
{#<pre>{{ dump(form) }}</pre>#}
{{ form_end(form) }}
</div>
{% include 'ShareSiteGeneralBundle:Default:footer.html.twig' %}
{%endblock%}
非常感谢!
答案 0 :(得分:1)
尝试使用submit()方法代替handleRequest
,这样就会提交您的表单。
请注意,如果您的Symfony版本低于3.0,您仍然可以将$request
传递给submit()
,但请尝试避免这种情况,例如使用json_decode($request->getContent(), true)
或其他内容,因为传递不推荐使用$request
提交。
而且,在控制器中使用业务逻辑是非常糟糕的做法。尝试将您的逻辑放入模型中(例如,您必须为此使用服务)。
P.S。我看不到您为表单设置action
和method
的位置。
答案 1 :(得分:0)
更改
print_r((string) $form->getErrors())
到
print_r($form->getErrors(true))
查看错误数组的内容,包括子元素的错误。
<强>更新强>
此外,在查询任何结果之前,您应该检查表单是否已提交。
$form->handleRequest($request);
if ($form->isSubmitted())
{
if ($form->isValid()) {
// [...]
}
}