Php 使用关联实体字段设置slug

Php 使用关联实体字段设置slug,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我正在使用DoctrineExtensions获取实体的可用行为。我的一个实体我想使用slug的相关地址实体的city字段。但是,我不知道如何访问它: /** *@var Foo\SiteBundle\Entity\Address * *@ORM\ManyToOne(targetEntity=“Foo\SiteBundle\Entity\Address”,cascade={“persist”}) *@ORM\JoinColumns({ *@ORM\JoinColumn(name=“address

我正在使用
DoctrineExtensions
获取实体的可用行为。我的一个实体我想使用slug的相关地址实体的city字段。但是,我不知道如何访问它:

/**
*@var Foo\SiteBundle\Entity\Address
*
*@ORM\ManyToOne(targetEntity=“Foo\SiteBundle\Entity\Address”,cascade={“persist”})
*@ORM\JoinColumns({
*@ORM\JoinColumn(name=“address\u id”,referencedColumnName=“id”)
* })
*/
私人$地址;
/**
*@Gedmo\Slug(字段={“地址->城市”,“名称”})
*@ORM\Column(长度=128,唯一性=true)
*/
私人$slug;
我如何才能完成这项工作?

您可以执行以下操作:

但在这里:

2012-02-26

删除了slug处理程序,该功能带来了 无法维持

不幸的是,此功能已被删除

因此,我认为您必须更改逻辑:例如,您可以使用包含地址段塞和当前实体的路由,并加载实体作为响应:

@Route("/user/{slugUser}/{slugAddress}.html", requirements={"slugUser"="^[a-z0-9-]+", "slugAddress"="^[a-z0-9-]+"})
或者一个解决方案,试着设置它。。。自动使用,但我不确定它是否有效:

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

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

不能直接执行此操作,因为sluggable扩展只能使用实体的直接字段。我能想到的唯一方法,尽管有点笨拙,是添加一个跟踪地址所在城市的字段。比如:

/**
 * @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();
}

我不确定是否需要将city持久化到数据库中(即,如果需要使用@ORM\Column),或者扩展是否可以处理未持久化的属性,只需在不使用@ORM注释的情况下尝试一下,看看它是否有效。

Sluggable功能被重新添加,并进一步扩展以支持树、关系等。