Bonjour, je vous remercie d'avance de m'aider.
Voilà je dois créer un générateur de formulaire pour mon entreprise et je dois le faire avec Symfony 4 sur lequel je suis plus que débutant.
Pour le moment aucun problème j'arrive a afficher mes entité (Formulaire et ChampsForm) qui sont en relation Many(ChampForm)toOne(Formulaire)
le formulaire d'ajout de Formulaire fonctionne j'arrive a ajouter en base de données aucun problème mais je n'arrive pas a récupérer les données du formulaire de la partit ChampsForm qui est imbriquer a celui du Formulaire, je peut ajouter des champs en javascript,le script n'est pas de moi je les pris puis modifier sur le cour de symfony sur openclassrooms je vous met aussi toutes mes entité +Controlleur.
l'erreur est que il n'arrive pas à envoyé en base de données car toutes mes valeurs sont null et j'en conclu qu'il ne récupère pas les valeur dans le formulaire, et bien sur quand il m'affiche l'erreur ci-dessous il m'ajoute quand même dans ma base de données les formulaires mais pas les champs
je ne cherche absolument pas une reponse toute faite mais au moins une piste sa fais deux jours que je cherche mais sans succès
ChampformType:
ChampsForm:
et pour finir mon controlleur :
la parti formulaire se soumet bien mais ses la parti champForm qui pose des problèmes
Sur l'image il n'y a que le champNom c'est plus simple pour mes test plutôt que tout réécrire a chaque fois
Voilà je dois créer un générateur de formulaire pour mon entreprise et je dois le faire avec Symfony 4 sur lequel je suis plus que débutant.
Pour le moment aucun problème j'arrive a afficher mes entité (Formulaire et ChampsForm) qui sont en relation Many(ChampForm)toOne(Formulaire)
le formulaire d'ajout de Formulaire fonctionne j'arrive a ajouter en base de données aucun problème mais je n'arrive pas a récupérer les données du formulaire de la partit ChampsForm qui est imbriquer a celui du Formulaire, je peut ajouter des champs en javascript,le script n'est pas de moi je les pris puis modifier sur le cour de symfony sur openclassrooms je vous met aussi toutes mes entité +Controlleur.
l'erreur est que il n'arrive pas à envoyé en base de données car toutes mes valeurs sont null et j'en conclu qu'il ne récupère pas les valeur dans le formulaire, et bien sur quand il m'affiche l'erreur ci-dessous il m'ajoute quand même dans ma base de données les formulaires mais pas les champs
An exception occurred while executing 'INSERT INTO champs_form (champ_nom, champs_type, champs_required, champ_max_size, champ_regex, champ_help, champs_order, champ_label, champ_form_id_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)' with params [null, null, null, null, null, null, null, null, 20]:
je ne cherche absolument pas une reponse toute faite mais au moins une piste sa fais deux jours que je cherche mais sans succès
ChampformType:
<?php
namespace App\Form;
use App\Entity\ChampsForm;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use App\Entity\Formulaire;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ChampformType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->setMethod('POST')
->add('champNom')
->add('champsType')
->add('champsRequired',CheckboxType::class)
->add('champMaxSize',IntegerType::class)
->add('champRegex')
->add('champHelp')
->add('champsOrder',IntegerType::class)
->add('champLabel')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => ChampsForm::class,
]);
}
}
Formulaire:
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\FormulaireRepository")
*/
class Formulaire
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $formNom;
/**
* @ORM\Column(type="string", length=255)
*/
private $formDescription;
/**
* @ORM\Column(type="integer")
*/
private $formTraitement;
/**
* @ORM\Column(type="boolean")
*/
private $formActive;
/**
* @ORM\Column(type="integer")
*/
private $formHit;
/**
* @ORM\Column(type="integer")
*/
private $formHitValide;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ChampsForm", mappedBy="champFormId", orphanRemoval=true ,cascade={"persist"})
*/
private $champsForms;
public function __construct()
{
$this->champsForms = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getFormNom(): ?string
{
return $this->formNom;
}
public function setFormNom(string $formNom): self
{
$this->formNom = $formNom;
return $this;
}
public function getFormDescription(): ?string
{
return $this->formDescription;
}
public function setFormDescription(string $formDescription): self
{
$this->formDescription = $formDescription;
return $this;
}
public function getFormTraitement(): ?int
{
return $this->formTraitement;
}
public function setFormTraitement(int $formTraitement): self
{
$this->formTraitement = $formTraitement;
return $this;
}
public function getFormActive(): ?bool
{
return $this->formActive;
}
public function setFormActive(bool $formActive): self
{
$this->formActive = $formActive;
return $this;
}
public function getFormHit(): ?int
{
return $this->formHit;
}
public function setFormHit(int $formHit): self
{
$this->formHit = $formHit;
return $this;
}
public function getFormHitValide(): ?int
{
return $this->formHitValide;
}
public function setFormHitValide(int $formHitValide): self
{
$this->formHitValide = $formHitValide;
return $this;
}
/**
* @return Collection|ChampsForm[]
*/
public function getChampsForms(): Collection
{
return $this->champsForms;
}
public function addChampsForm(ChampsForm $champsForm): self
{
if (!$this->champsForms->contains($champsForm)) {
$this->champsForms[] = $champsForm;
$champsForm->setChampFormId($this);
}
return $this;
}
public function removeChampsForm(ChampsForm $champsForm): self
{
if ($this->champsForms->contains($champsForm)) {
$this->champsForms->removeElement($champsForm);
// set the owning side to null (unless already changed)
if ($champsForm->getChampFormId() === $this) {
$champsForm->setChampFormId(null);
}
}
return $this;
}
}
ChampsForm:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ChampsFormRepository")
*/
class ChampsForm
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $champNom;
/**
* @ORM\Column(type="integer")
*/
private $champsType;
/**
* @ORM\Column(type="boolean")
*/
private $champsRequired;
/**
* @ORM\Column(type="integer")
*/
private $champMaxSize;
/**
* @ORM\Column(type="text")
*/
private $champRegex;
/**
* @ORM\Column(type="string", length=255)
*/
private $champHelp;
/**
* @ORM\Column(type="integer")
*/
private $champsOrder;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Formulaire", inversedBy="champsForms",cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
*/
private $champFormId;
/**
* @ORM\Column(type="string", length=255)
*/
private $champLabel;
public function getId(): ?int
{
return $this->id;
}
public function getChampNom(): ?string
{
return $this->champNom;
}
public function setChampNom(string $champNom): self
{
$this->champNom = $champNom;
return $this;
}
public function getChampsType(): ?int
{
return $this->champsType;
}
public function setChampsType(int $champsType): self
{
$this->champsType = $champsType;
return $this;
}
public function getChampsRequired(): ?bool
{
return $this->champsRequired;
}
public function setChampsRequired(bool $champsRequired): self
{
$this->champsRequired = $champsRequired;
return $this;
}
public function getChampMaxSize(): ?int
{
return $this->champMaxSize;
}
public function setChampMaxSize(int $champMaxSize): self
{
$this->champMaxSize = $champMaxSize;
return $this;
}
public function getChampRegex(): ?string
{
return $this->champRegex;
}
public function setChampRegex(string $champRegex): self
{
$this->champRegex = $champRegex;
return $this;
}
public function getChampHelp(): ?string
{
return $this->champHelp;
}
public function setChampHelp(string $champHelp): self
{
$this->champHelp = $champHelp;
return $this;
}
public function getChampsOrder(): ?int
{
return $this->champsOrder;
}
public function setChampsOrder(int $champsOrder): self
{
$this->champsOrder = $champsOrder;
return $this;
}
public function getChampFormId(): ?Formulaire
{
return $this->champFormId;
}
public function setChampFormId(?Formulaire $champFormId): self
{
$this->champFormId = $champFormId;
return $this;
}
public function getChampLabel(): ?string
{
return $this->champLabel;
}
public function setChampLabel(string $champLabel): self
{
$this->champLabel = $champLabel;
return $this;
}
}
et pour finir mon controlleur :
/**
* @Route ("/form/addchamp", name="addchamps")
*/
public function add_champ(Request $request, ObjectManager $manager)
{
$form = new Formulaire();
$formulaire = $this->createFormBuilder($form)
->add('formNom')
->add('formDescription')
->add('formTraitement')
->add('formActive')
->add('champsForms', CollectionType::class, array(
'entry_type' => ChampformType::class,
'allow_add' => true,
'allow_delete' => true,
))
->add('formButton', SubmitType::class)
->getForm();
$formulaire->HandleRequest($request);
dump($formulaire);
if ($formulaire->isSubmitted()&& $formulaire->isValid()) {
$champForm = new ChampsForm;
$form->addChampsForm($champForm);
$form->setFormHit(0);
$form->setFormHitValide(0);
$manager->persist($form);
// echo $form['champsForms'][0]->getData();
dump($form);
dump($champForm);
$manager->flush();
return $this->render('form/add_champ.html.twig', [
'controller_name' => 'FormController',
'Forms' => $formulaire->createView(),
]);
}
return $this->render('form/add_champ.html.twig', [
'controller_name' => 'FormController',
'Forms' => $formulaire->createView(),
]);
}
la parti formulaire se soumet bien mais ses la parti champForm qui pose des problèmes
Sur l'image il n'y a que le champNom c'est plus simple pour mes test plutôt que tout réécrire a chaque fois