再生slu Doc Doctrine2

时间:2012-08-03 08:05:54

标签: symfony doctrine-orm slug

我正在尝试重新设置我在为Doctrine2安装Sluggable扩展之前创建的实体的slug,如下所述:Regenerating slug,但当我将其设置为空字符串或null时,不会重新生成它,它只是设置为null。

我做错了什么?

实体:

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Gedmo\Mapping\Annotation as Gedmo;

/**
* @ORM\Entity
* @ORM\Table(name="product")
*/
class Product
{

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\Column(type="string", length=200)
 * @Assert\NotBlank()
 */
protected $name;

/**
 * @ORM\Column(type="text")
 * @Assert\NotBlank()
 */
protected $description;

...

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

public function getSlug()
{
    return $this->slug;
}
public function setSlug($slug)
{
    $this->slug = $slug;

}
}

然后我试试这个:

$repository = $this->getDoctrine()->getRepository('CommonBundle:Product');
$product = $repository->findOneBy(array("id"=>1));
$product->setSlug('');
$em = $this->getDoctrine()->getEntityManager();
$em->persist($product);
$em->flush();

1 个答案:

答案 0 :(得分:1)

行。我知道发生了什么。您可能正在使用旧版本的Doctrine Extensions,可能是2.1.0版。如果您使用Symfony 2.0.X进行开发,那将是这种情况,因为这是推荐的版本。检查你的deps文件,你可能有类似的东西:

[gedmo-doctrine-extensions]
    git=http://github.com/l3pp4rd/DoctrineExtensions.git
    version=v2.1.0

这些旧版本的扩展不支持文档中描述的行为(如果它是空的,则重新生成slug)。您需要升级扩展版本,但这可能意味着您可能必须将Doctrine版本升级到2.2,而不是非常确定。