0

在 Symfony2.3 中,我正在尝试配置一个实体来执行以下操作

示例是一个基本的页面实体。

我有两个属性。

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

/**
*set slug
*@return Campaign
*/
protected $slug;

public function setSlug($slug)
{
    // if slug is false or empty, use the title instead
    if ($slug == '' || $slug == false)
    {
        $slug = $this->getTitle();
    }
    $slug = preg_replace('/[\s-]+/', '-', trim($slug," -\t\n\r\0\x0B"));
    $slug = preg_replace('/[^a-z0-9-]/', '', strtolower($slug) );
    $this->slug = $slug;
    return $this;
}

虽然实体中需要 Slug,但表单中不需要。我不希望它在表单中是必需的,因为如果未填写它应该默认为标题。除了手动检查它并在未填写时在控制器中调用它之外,是否有更好的自动化方式表单表单配置?

4

2 回答 2

1

对于这个特性,我使用了 Doctrine Extensions。

在这里找到更多关于如何实现它们的信息:http: //symfony.com/doc/current/cookbook/doctrine/common_extensions.html

使用这种方法,您需要为生成 slug 做的唯一事情就是在您的实体中将属性定义为 sluggable。

于 2013-10-22T04:18:08.587 回答
0

发现似乎最有组织的方式是事件订阅者。表单绑定后,如果 slug 为 false,则调用 set slug 方法。这将允许它在实体上正确验证,但允许表单在不需要该字段的情况下进行处理。

于 2013-10-22T05:47:22.917 回答