Bonjour,

Je débute avec symfony et je me prends la tête depuis quelques jours pour récupérer la valeure d'une variable dans un formulaire.

J'ai besoin de faire un calcul en soustrayant un nombre de place sélectionné dans un input à celui qui est chargé initialement.

Je ne sais pas si c'est très clair mais en gros j'ai 15 places qui s'affiche dans le input quand on arrive sur la page et je souhaiterais soustraire à cette valeure la le nombre sélectionné lors de la soumission.

Mon controlleur:

/**
 * @ORM\Entity(repositoryClass="App\Repository\CamionRepository")
 * @UniqueEntity("immatCamion", message="Cette plaque d'immatriculation existe déjà dans la base.")
 */
class Camion
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=7, unique=true)
     * @Assert\Regex("/^[a-zA-Z]{2}[0-9]{3}[a-zA-Z]{2}$/")
     * @Assert\Length(
     * min=7, 
     * max=7, 
     * exactMessage="Merci de rentrer 7 caractères de cette forme AA123AA."
     * )
     */
    private $immatCamion;

    /**
     * @ORM\Column(type="integer")
     */
    private $nbrPlaces;

    /**
     * @ORM\Column(type="integer")
     * @Assert\Length(
     *     min = 1,
     *     max={"restePlaces"},
     *     minMessage = "Vous devez prendre en charge au moins une voiture dans le camion.",
     *     maxMessage = "Il n'y a pas assez de places disponibles dans ce camion."
     * )
     */
    private $restePlaces;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    private $heureDepart;

    /**
     * @ORM\Column(type="datetime", nullable=true)
     */
    private $heureArrive;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Trajet", inversedBy="camions")
     */
    private $trajet;

    public function __construct()
    {
        $this->restePlaces = $this->nbrPlaces;
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getNbrPlaces(): ?int
    {
        return $this->nbrPlaces;
    }

    public function setNbrPlaces(int $nbrPlaces): self
    {
        $this->nbrPlaces = $nbrPlaces;

        return $this;
    }

    public function getRestePlaces(): ?int
    {
        return $this->restePlaces;
    }

    public function setRestePlaces(int $restePlaces): self
    {
        $this->restePlaces = $restePlaces;

        return $this;
    }

Mon twig:

        {% if (camion.restePlaces > 0) %}
            {{ form_start(formCamion, {'action': path('ajout_trajet', {'camion': camion.id, 'trajet': trajet.id })}) }}
                {% if (camion.restePlaces == 1) %}
                    <p class="btn-danger">Il est possible de ne charger qu'une voiture dans ce camion.</p>
                {% elseif (camion.restePlaces > 1) %}
                    <p>Il reste {{ camion.restePlaces }} places dans ce camion.</p>
                    <div>
                        <p>Combien de voitures doivent être prises en charge ?</p>

                        {{ form_widget(formCamion.restePlaces) }}

                    </div>
                {% endif %}
                <p>Quel trajet voulez-vous faire ?</p>
                {# récupérer les trajet #}
                <div class="list-group list-camions">
                    {% for trajet in trajets %}
                        <div class="coul-altern list-group-item list-group-item-action flex-column align-items-start">
                            <div class="d-flex w-100 justify-content-between">
                                <div class="list-group-item-action marg-right-btn">
                                    <div class="d-flex w-100 justify-content-between">
                                        {{ trajet.lieuDepart }}
                                        -->
                                        {{ trajet.lieuArrive}}
                                        <small>Temps de trajet : {{ trajet.temps | date('i') }} mn</small>
                                    </div>
                                </div>
                                <button type="submit" class="btn btn-success btn-supp-list-group">
                                    Sélectionner
                                </button>
                            </div>
                        </div>
                    {% endfor %}
                </div>
            {{ form_end(formCamion) }}

{{ form_widget(formCamion.restePlaces) }}
me charge une valeur lors de l'ouverture de la page.

On fait une sélection sur la page et à la validation, je souhaiterais soustraire la valeure sélectionnée à la valeure affichée à l'ouverture de la page.

Pouvez vous me diriger sur une piste ?

Merci d'avance.

2 réponses


Bonjour Fistoon,
Il nous manque le code du controller.
Car c'est dans le controller que ça va se jouer.
Cordialement

Fistoon
Auteur

C'était tout simple.
Il fallait simplement que je mette une variable temporaire avant mon formulaire :ptdr:
Quand je vous disais être novice :roll:
Je vais devoir replonger un peu dans les cours pour bien comprendre le déroulement des événements.
Merci tout de même.