Reputation: 6800
I have 3 dropdowns. The first dropdown is visible. When you select a value in the first dropdown, an ajax call is made and pulls data according to the selected value and add the options to the second dropdown that gets visible. Same for the third when you select a value in the second dropdown.
But the problem is now, when I want to submit the form that I always get a validation error This value is not valid.
on the second and third dropdown. Is there a way how I can fix this? Or maybe disable the validation on these last two fields?
In my register form type I have
->add('player', new PlayerType())
In my Player form type I have
->add('team', new TeamType(), array(
'label' => 'Team*',
'required' => false
))
And in my TeamType I have
$builder
->add('competition', new CompetitionType())
->add('teamName', 'choice', array(
'empty_value' => 'Kies uw competitie.',
'label' => 'Team'
))
;
And in CompetitionType I have:
$builder
->add('region', 'entity', [
'label' => 'Regio',
'class' => 'VolleyScoutBundle:Regions',
'property' => 'regionName',
'empty_value' => 'Kies uw regio.'
])
->add('competitionName', 'choice', array(
'empty_value' => 'Kies uw competitie.',
'label' => 'Competitie'
))
;
I'm getting errors at competitionName and teamName. I load the data in jquery like this:
$('#register_player_team_competition_region').on('change', function() {
var region_id = this.value;
$.ajax({
url: getCompetitonsUrl,
data: {
regionid: region_id
},
success: function( data ) {
$(data).each(function( index, val ) {
$('#register_player_team_competition_competitionName').append("<option value='" + val.value + "'>" + val.label + "</option>");
$('#register_player_team_competition_competitionName').trigger("chosen:updated");
$('.competition').removeClass('hide');
$('.competition').css('display', 'block');
});
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr.status);
console.log(thrownError);
}
})
});
$('#register_player_team_competition_competitionName').on('change', function() {
var competition_id = this.value;
$.ajax({
url: getTeamsUrl,
data: {
competitionid : competition_id
},
success: function( data ) {
console.log(data);
$(data).each(function( index, val ) {
$('#register_player_team_teamName').append("<option value='" + val.value + "'>" + val.label + "</option>");
$('#register_player_team_teamName').trigger("chosen:updated");
$('.team').removeClass('hide');
$('.team').css('display', 'block');
});
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr.status);
console.log(thrownError);
}
})
});
My register view:
{% extends "::securitybase.html.twig" %}
{% block title %}Register | {{ parent() }}{% endblock %}
{% block body %}
{% set class_error = ' has-error' %}
<div class="row">
<h1 class="col-sm-offset-3"><img src="{{ asset('bundles/volleyscout/images/volleybal.png') }}" width="40" height="40" alt=""> VolleyScout</h1>
{{ form_start(registerForm, {"attr": {"class": "form-horizontal"} }) }}
<fieldset>
<legend>Personalia</legend>
<div class="form-group{{ registerForm.userFirstname.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.userFirstname, label|default(),
{"label_attr": {"class": "col-sm-3 control-label"} }) }}
<div class="col-sm-9">
{{ form_widget(registerForm.userFirstname,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.userFirstname.vars.valid %}
<div class="col-sm-offset-3 col-sm-9">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.userFirstname) }}
</div>
{% endif %}
</div>
<div class="form-group{{ registerForm.userSurname.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.userSurname, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.userSurname,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.userSurname.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.userSurname) }}
</div>
{% endif %}
</div>
<div class="form-group{{ registerForm.userType.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.userType, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.userType,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.userType.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.userType) }}
</div>
{% endif %}
</div>
</fieldset>
<fieldset class='teams'>
<legend>Team</legend>
<div class="form-group{{ registerForm.player.playerLicensenumber.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.playerLicensenumber, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.playerLicensenumber,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.playerLicensenumber.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.playerLicensenumber) }}
</div>
{% endif %}
</div>
<div class="form-group{{ registerForm.player.playerBirthyear.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.playerBirthyear, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.playerBirthyear,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.playerBirthyear.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.playerBirthyear) }}
</div>
{% endif %}
</div>
<div class="position form-group{{ registerForm.player.playerPosition.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.playerPosition, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.playerPosition,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.playerPosition.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.playerPosition) }}
</div>
{% endif %}
</div>
<div class="region form-group{{ registerForm.player.team.competition.region.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.team.competition.region, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.team.competition.region,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.team.competition.region.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.team.competition.region) }}
</div>
{% endif %}
</div>
<div class="competition hide form-group{{ registerForm.player.team.competition.competitionName.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.team.competition.competitionName, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.team.competition.competitionName,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.team.competition.competitionName.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.team.competition.competitionName) }}
</div>
{% endif %}
</div>
<div class="team hide form-group{{ registerForm.player.team.teamName.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.player.team.teamName, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
{{ form_widget(registerForm.player.team.teamName,
{"attr": {"class": "form-control"} }) }}
</div>
{% if not registerForm.player.team.teamName.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.player.team.teamName) }}
</div>
{% endif %}
</div>
</fieldset>
<fieldset>
<legend>Account</legend>
<div class="form-group{{ registerForm.userEmail.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.userEmail, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"} }) }}
<div class="col-sm-9">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-envelope"></i></span>
{{ form_widget(registerForm.userEmail,
{"attr": {"class": "form-control"} }) }}
</div>
</div>
{% if not registerForm.userEmail.vars.valid %}
<div class="col-sm-offset-3 col-sm-9 has-error">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.userEmail) }}
</div>
{% endif %}
</div>
<div class="form-group{{ registerForm.username.vars.valid ? '' : class_error }}">
{{ form_label(registerForm.username, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"}}) }}
<div class="col-sm-9">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
{{ form_widget(registerForm.username,
{"attr": {"class": "form-control" } }) }}
</div>
</div>
{% if not registerForm.username.vars.valid %}
<div class="col-sm-offset-3 col-sm-9">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{{ form_errors(registerForm.username) }}
</div>
{% endif %}
</div>
<div class="form-group{{ registerForm.password.vars.valid ? '' : class_error }}">
{% for passwordItem in registerForm.password %}
{{ form_label(passwordItem, label|default(),
{ "label_attr": { "class": "col-sm-3 control-label"} }) }}
<div class="col-sm-9">
<div class="input-group">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
{{ form_widget(passwordItem,
{"attr": {"class": "form-control"} }) }}
</div>
</div>
{% endfor %}
{% if not registerForm.password.vars.valid %}
<div class="col-sm-offset-3 col-sm-9">
<h5><i class="glyphicon glyphicon-warning-sign"></i> <strong>Please fix:</strong></h5>
{% for passwordItem in registerForm.password %}
{{ form_errors(passwordItem) }}
{% endfor %}
</div>
{% endif %}
</div>
</fieldset>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
{{ form_widget(registerForm.btn_register,
{"attr": {"class": "btn btn-primary"} }) }}
<a href="{{ path('volley_scout_loginpage') }}" class="btn btn-link">Inloggen</a>
</div>
{{ form_end(registerForm) }}
</div>
</div>
{% endblock %}
Upvotes: 1
Views: 1771
Reputation: 7800
Both choice fields , competitionName
and teamName
have no values , you gave them a label and an empty value and since you havent explicity mentionned that they are not required symfony
will set them as required in the rendred form.
so either you set them as not required :
->add('competitionName', 'choice', array(
'empty_value' => 'Kies uw competitie.',
'label' => 'Competitie',
'required' => false // they are no longer required
))
or you gave values to the choice field :
->add('competitionName', 'choice', array(
//choices here
'choices' => array('footbal' => 'Footbal', 'swimming' => 'Swimming'),
'empty_value' => 'Kies uw competitie.',
'label' => 'Competitie',
'required' => false
))
Upvotes: 1