Bonjour bonjour,
Voila je rencontre un petit problème avec mon code Symfony.
J'ai un formulaire avec une variable "Dossier" et une variable "Emplacement".
Mon entité Dossier contient plusieurs Emplacements alors qu'un Emplacement n'appartient qu'à un Dossier. OneToMany.
J'aimerai que lorsque je selectionne un dossier dans mon formulaire, ce soit les emplacements correspondant qui saffichent dans mon select emplacements ... j'ai donc suivit la doc symfony : https://symfony.com/doc/master/form/dynamic_form_modification.html
Mon Formulaire :
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('file', FileType::class, array('label' => 'Télecharger'))
->add('dossier', EntityType::class, array(
'class' => 'AMContentManagerBundle:Dossier',
'choice_label' => 'nom',
))
->add('piece', EntityType::class, array(
'class' => 'AMCoreBundle:Piece',
'choice_label' => 'nom',
'expanded' => true,
'multiple' => false,
))
->add('save', SubmitType::class,
array('label' => 'Ajouter'));
var_dump($builder);
$formModifier = function (FormInterface $form, Dossier $dossier = null) {
$emplacements = null === $dossier ? array() : $dossier->getAvailableEmplacements();
$form->add('emplacement', EntityType::class, array(
'class' => 'AMContentManagerBundle:Emplacement',
'placeholder' => '',
'choices' => $emplacements,
));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier) {
// this would be your entity, i.e. SportMeetup
$data = $event->getData();
$formModifier($event->getForm(), $data->getDossier());
}
);
$builder->get('dossier')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
var_dump('entre');
// It's important here to fetch $event->getForm()->getData(), as
// $event->getData() will get you the client data (that is, the ID)
$dossier = $event->getForm()->getData();
// since we've added the listener to the child, we'll have to pass on
// the parent to the callback functions!
$formModifier($event->getForm()->getParent(), $dossier);
}
);
}
Mon controlleur :
$image = new Image();
$form = $this->get('form.factory')->create(ImageType::class, $image, array(
'action' => $this->generateUrl('ContentManager_image_list', array('dossier' => $dossier))
));
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if($dossier = 'Galerie'){
$Thumb = $this->get('helper.imageresizer')->resizeImage($image->getFile(), $path, $height=105, $width=140);
}
if($dossier = 'Activites'){
$Thumb = $this->get('helper.imageresizer')->resizeImage($image->getFile(), $path, $height=150, $width=200);
}
$image->setUrlThumbnail($Thumb);
$em = $this->getDoctrine()->getManager();
$em->persist($image);
$em->flush();
$request->getSession()->getFlashBag()->add('notice', 'Image bien créée');
return $this->redirectToRoute('ContentManager_image_home');
}
// L'appel de la vue ne change pas
return $this->render('AMContentManagerBundle:Image:list.html.twig', array(
'form' => $form->createView(),
));
et enfin ma vue ;
{% block body %}
{{ form_start(form) }}
{# -- Image -- #}
<div class="form-group" id="formImage" >
{{ form_label(form.file, "Image", {'label_attr': {'class': 'control-label'}}) }}
{{ form_errors(form.file) }}
{{ form_widget(form.file) }}
</div>
{# -- Dossier -- #}
<div class="form-group" id="formDossier" >
{{ form_label(form.dossier, "Dossier", {'label_attr': {'class': 'control-label dossierchange'}}) }}
{{ form_errors(form.dossier) }}
{{ form_widget(form.dossier) }}
</div>
{{ form_row(form.emplacement) }}
<div class="form-group">
{{ form_rest(form) }}
</div>
{{ form_end(form) }}
{% endblock %}
{% block javascripts %}
<script>
$(function(){
jQuery(document).ready(function() {
console.log("jQuery est prêt !");
var $dossier = $('#image_dossier');
$dossier.change(function() {
var $form = $(this).closest('form');
var data = {};
data[$dossier.attr('name')] = $dossier.val();
console.log('url : '+$form.attr('action'));
console.log('type: '+$form.attr('method'));
console.log('data : '+data);
$.ajax({
url : "",
type: $form.attr('method'),
data : data,
success: function(html) {
console.log(html);
$('#image_emplacement').replaceWith(
$(html).find('#image_emplacement')
);
}
});
});
})
});
</script>
L'erreur que j'obtiens est celle-ci : mon URL net::ERR_CONNECTION_RESET
Quelqu'un a une idée ? j'ai tout essayé ... en plus le profiler Symfony ne m'aide pas du tout.
Merci d'avance
Hello,
As-tu vidé ton cache ? Quel environnement de dev as-tu mis en place ? Cette erreur ne semble pas en rapport avec ton code. Peut-être que je me trompe, je up le sujet quand même ;-)
Merci.
Oui j'ai bien vidé mon cache ....
Mon environnement de dev ? je suis sur Wamp .....
Une idée ?
Bonjour.
Dans le code que tu nous montre, tu ne fermes pas le block javascripts
(à moins que ce soit juste une erreur de copie), ça ne viendrait pas de ça ?
Ah oui non non c'est une erreur de copié collé. Désolé. Mon block est bien fermé ....