3 votes

Définir le slug en utilisant le champ d'entité associé

J'utilise DoctrineExtensions pour obtenir un comportement lent pour mes entités. Dans l'une de mes entités, j'aimerais utiliser le champ "ville" de l'entité "adresse" pour le slug. Cependant, je ne sais pas comment y accéder :

/**
 * @var Foo\SiteBundle\Entity\Address
 *
 * @ORM\ManyToOne(targetEntity="Foo\SiteBundle\Entity\Address", cascade={"persist"})
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="address_id", referencedColumnName="id")
 * })
 */
private $address;

/**
 * @Gedmo\Slug(fields={"address->city", "name"})
 * @ORM\Column(length=128, unique=true)
 */
private $slug;

Comment puis-je faire en sorte que cela fonctionne ?

1voto

Sybio Points 3607

Vous pourriez le faire : https://github.com/l3pp4rd/DoctrineExtensions/issues/86

Mais ici https://github.com/l3pp4rd/DoctrineExtensions :

2012-02-26

Suppression des gestionnaires de slug, cette fonctionnalité apportait des complications qui ne pouvait pas être maintenue.

Malheureusement, cette fonctionnalité a été supprimée !

Je pense donc que vous devez modifier votre logique : par exemple, vous pouvez utiliser une route contenant le slug de l'adresse et l'entité actuelle et charger l'entité en réponse :

@Route("/user/{slugUser}/{slugAddress}.html", requirements={"slugUser"="^[a-z0-9-]+", "slugAddress"="^[a-z0-9-]+"})

Ou peut-être une solution, essayer de le mettre manuellement ... et automatiquement avec cycles de vie mais je ne suis pas sûr que cela fonctionne :

/**
 * @Gedmo\Slug(fields={})
 * @ORM\Column(length=128, unique=true)
 */
private $slug;

/**
 * @ORM\PrePersist
 */
public function updateSlug()
{
    $this->setSlug($this->name.$this->address->getCity());
}

0voto

Carlos Granados Points 5698

Vous ne pouvez pas le faire directement car l'extension ralentie ne peut utiliser qu'un champ direct de l'entité. La seule façon à laquelle je pense, bien qu'elle soit un peu maladroite, est d'ajouter un champ qui suit la ville de l'adresse. Quelque chose comme :

/**
 * @ORM\Column(length=128)
 */
private $city;

/**
 * @Gedmo\Slug(fields={"city", "name"})
 * @ORM\Column(length=128, unique=true)
 */
private $slug;

//setter for Address
public function setAddress($address) {
    $this->address= $address;
    $this->city = $address->getCity();
}

Je ne sais pas vraiment si la ville doit être persistée dans la base de données (c'est-à-dire si vous devez utiliser @ORM \Column avec elle) ou si l'extension peut fonctionner avec une propriété qui n'est pas persistée, essayez-la sans l'annotation @ORM et voyez si elle fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X