Bonjour,
J'ai un problème avec la validation des forms. isValid() renvoie toujours true et les asserts ne sont pas pris en compte.
J'utilise "Symfony\Component\Validator\Constraints". Ca fait des jours que je cherche je ne comprends vraiment pas ..
mon entité (je teste uniquement titre):
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\PostRepository")
*/
class Post
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=10, nullable=true)
* @Assert\Length(min="5", max="10", minMessage="Le titre doit faire au moins {{ limit }} caractères.", maxMessage="Le titre doit faire au plus {{ limit }} caractères.")
*/
private $title;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $image;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="post")
*/
private $Category;
/**
* @ORM\Column(type="integer")
*/
private $idPosteur;
/**
* @ORM\Column(type="string", length=500)
*/
private $description;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $location;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $price;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $type;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
private $duration;
/**
* @ORM\Column(type="integer", nullable=true)
*/
private $subCat;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $paiement;
/**
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="posts")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(?string $title): self
{
$this->title = $title;
return $this;
}
public function getImage(): ?string
{
return $this->image;
}
public function setImage(?string $image): self
{
$this->image = $image;
return $this;
}
public function getCategory(): ?Category
{
return $this->Category;
}
public function setCategory(?Category $Category): self
{
$this->Category = $Category;
return $this;
}
public function getIdPosteur(): ?int
{
return $this->idPosteur;
}
public function setIdPosteur(int $idPosteur): self
{
$this->idPosteur = $idPosteur;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(string $description): self
{
$this->description = $description;
return $this;
}
public function getLocation(): ?string
{
return $this->location;
}
public function setLocation(?string $location): self
{
$this->location = $location;
return $this;
}
public function getPrice(): ?int
{
return $this->price;
}
public function setPrice(?int $price): self
{
$this->price = $price;
return $this;
}
public function getType(): ?int
{
return $this->type;
}
public function setType(?int $type): self
{
$this->type = $type;
return $this;
}
public function getDuration(): ?\DateTimeInterface
{
return $this->duration;
}
public function setDuration(?\DateTimeInterface $duration): self
{
$this->duration = $duration;
return $this;
}
public function getSubCat(): ?int
{
return $this->subCat;
}
public function setSubCat(?int $subCat): self
{
$this->subCat = $subCat;
return $this;
}
public function getPaiement(): ?string
{
return $this->paiement;
}
public function setPaiement(?string $paiement): self
{
$this->paiement = $paiement;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
}
Merci d'avance pour votre aide, je bloque totalement,
Bonne journée
Haha, j'en était sûr, c'était ça ou tu avais pas handle la request correctement, pour ça que je voulais voir ton controlleur ^^
Maintenant tu n'oubliera plus ;)
Pense bien à mettre en résolu.
Salut il faut voir dans un premier temps ton fichier de configuration "security.yaml" et aussi je pense que cette classe doit implémenter une méthode pour fonctionner . je mets à ta disposition mon code si cela peut t'aider et aussi revoir ton controller s'il est bien ne contient pas d'erreur.
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
fields={"phone"}, message="Numéro de télephone déjà utilisé par une autre personne !")
*/
class User implements UserInterface,\Serializable
{
/**
/**
/**
/**
*/
private $password;
/**
public function getId(): ?int
{
return $this->id;
}
public function getUsername(): ?string
{
return $this->username;
}
public function setUsername(string $username): self
{
$this->username = $username;
return $this;
}
public function getPhone(): ?string
{
return $this->phone;
}
public function setPhone(string $phone): self
{
$this->phone = $phone;
return $this;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getConfirmPassword()
{
return $this->confirm_password;
}
public function setConfirmPassword($confirm_password)
{
$this->confirm_password = $confirm_password;
return $this;
}
public function getRoles()
{
return ['ROLE_USER'];
}
public function eraseCredentials()
{
}
public function getSalt()
{
}
/**
/**
}
Bonsoir et merci beaucoup de ton retour !
J'ai bien regardé ton code et je ne vois pas vraiment ce que j'ai pu oublier... J'ai silloné les forums, je pense que mon security est bon, le controleur je ne vois vraiment pas. C'est un vrai casse tête je ne vois pas à côté de quoi je passe !
Salut,
Je ne vois pas bien ce que le security.yaml viens faire dans l'histoire, il n'intervient que pour la gestion de l'authentification, à la limite s y'avais un is granted ok mais là je vois pas.
Je manque d'éléments pour te répondre correctement, en effet il faudrais que tu me montre le code de ton controlleur et celui de ton formulaire. Cela me permetterais d'avoir une meilleur vue de ton code et pourvoir te répondre j'espère avec plus de pertinence :)
Hello, Merci pour ta réponse,
Je crois avoir trouvé une piste (j'utilise form_widget pour afficher mes forms), je regarde ca demain, et si je trouve pas je t'enverrai plus d'éléments !
Merci pour ton temps !
Bonsoir,
form_widget ne pose pas trop de soucis selon moi du moment que ton formulaire est valide (côté HTML), je chercherais plutôt du côté du controlleur à ta place :). Après je peut me tromper, dit moi ce que tes tests donnent sur form_widget.
Si je dis pas de bétise, form_widget va m'afficher que la zone de texte, donc il est normal que je percoive aucun message d'erreur ?
Je reviens vers toi, si c'est pas ca j'ai vraiment aucune idée je mettrai mon controleur ici !
Tu parle de formulaire qui est tout le temps valide pas d'affichage d'erreur, je me suis basé là dessus pour ma réponse ;)
Après la partie affichage change pas grand grand chose, si ton formulaire est faux, label ou pas, ton isValid devrait pas matcher. Après oui tu aura pas de retours visuel avec form_widget.
Alors.... comment dire que j'avais juste oublié de mettre le isValid..
Désolé pour la perte de temps
Bonne journée