Bonjour à tous,

J'ai possède une application basé sur un modèle comme ceci (côté front, c'est le même principe niveau affichage) :

1 etablissement
X classes
X matieres
X ressources

  • categorie
  • quantite
  • 1 matiere
  • archived_at

Pour gérer ceci, j'ai un énorme formulaire. Je vous épargne tous les autres champs "simples" de chaque entité. L'utilisateur ne peux pas ajouter de classe, de matière, d'établissement, il a uniquement accès à l'ajout de ressources, sans restriction. Il y a 4 à 6 champs par ressource, certains ne sont pas obligatoires.

Pour le formulaire, j'utilise le formBuilder de symfony, avec des collectionType imbriquées.

Chaque année, les anciennes ressources sont archivées à la date du jour de la reprise de la plateforme (admettons le 17/02/2022). Visuellement, les archives sont regroupées entre elles par matière, dans une zone que l'on peut afficher ou non.

Mon gros problème, c'est que comme il n'y a pas de limite aux ressources et que chaque ressource possède 4 à 6 champs obligatoires et que les autres entités (matière notamment) ont d'autres champs, le nombre d'input s'allonge (j'ai même du augmenter le max_input_var vers 2500 et la limit memoire à -1). Et parfois, la limite mémoire est complètement à la ramasse, j'ai un bout de page et en dessous, le message comme quoi la mémoire est saturée.

Pour tenter de palier à ça, j'ai essayé de réduire le nombre de champ sur les ressources (en les supprimant tous, mais uniquement pour que cela affecte les archives). Côté front, pas de changement, les données sont bien restituées.

Mais lorsque j'enregistre, les champs qui ne sont pas présents côté HTML se mettent à null, ce qui en soit est normal car la soumission se fait, les champs ne sont pas détectés, et sont par défaut à null.

Je cherche à faire comme un "mapped => false", mais uniquement sur les ressources dont la date d'archive n'est pas nul. Est-ce que vous avez déjà eu/vu une problématique similaire ?

Je suis en symfony 4.4.

1 réponse


Regarde du coté des évenements FormEvents::PRE_SUBMIT