Bonjour,

J'ai un formulaire, sans entity, et j'aimerais modifier une valeur avant de le resoumettre à l'utilisateur. Est-ce possible ?

Pour mieux comprendre, ci-après l'enchaînement des actions :
  1. l'utilisateur arrive sur la page avec le form vierge (RechercheType)
  2. Il saisit ses critères et clique sur le bouton "envoyer"
  3. un script ajax essaie de récupérer une info (latitude/longitude d'après le champ adresse)
  4. le controller récupère le formulaire (request post)
  5. si lat/lng ne sont pas correctement remplis, le controller essaie à son tour de récupérer lat/lng,
  6. si c'est ok, il met à jour lat/lng et adresse au bon format,
  7. le controller récupère le résultat de la recherche demandée par l'utilisateur,
  8. la page s'affiche avec les résultats + le formulaire de recherche (qui a conservé les critères saisis par l'utilisateur, mais avec adresse+lat+lng correctement remplis)


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 
<?php
 
namespace Vbo\VegiswapBundle\Controller;
 
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Vbo\VegiswapBundle\Entity\Annonce;
use Vbo\VegiswapBundle\Form\Type\ContactType;
use Vbo\VegiswapBundle\Form\Type\RechercheType;
 
class DefaultController extends Controller
{
	public function searchAction()
	{
		// Initialise le formulaire
		$form = $this->get('form.factory')->create(new RechercheType());
		$request = $this->get('request');
 
		// Si methode = POST, le formulaire vient d'être soumis
		if ($request->getMethod() == 'POST')
		{
			// Récupère les valeurs du formulaire
			$form->bindRequest($request);
			$data = $form->getData();
			$user_lat = $data['user_lat'];
			$user_lng = $data['user_lng'];
			$address = $data['address'];
 
			// Si l'adresse est renseignée mais que lat/lng sont vides, on appelle le service gmaps pour récupérer les coordonnées
			if ($address<>"" && ($user_lat=="" || $user_lat==0 || $user_lng=="" || $user_lng==0)) {
				try {
					$obj = json_decode(file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address='.urlencode($address).'&sensor=false'), true);
					$user_lat = $obj["results"][0]["geometry"]["location"]["lat"];
					$user_lng = $obj["results"][0]["geometry"]["location"]["lng"];
					$address = utf8_decode($obj["results"][0]["address_components"][0]["long_name"]).' ('.$obj["results"][0]["address_components"][1]["short_name"].')';
 
>>>>				$form->setData('user_lat', $user_lat); // Quelle est la bonne syntaxe ???????
>>>>				// Et idem pour lng et address
				}
				catch (Exception $e) {
					$logger->error('Erreur lors de la recuperation lat/lng : '.$e->getMessage());
				}
			}
 
			// Recuperation des resultats
			$results = ...
 
			// Affichage de la page avec les résultats
			return $this->render('VboVegiswapBundle:Default:index.html.twig', array(
				'form' => $form->createView(),
				'results' => $results,
			));
		}
	}
}