Symfony2.3必需的实体属性,表单中不需要,如何动态默认属性?

时间:2013-10-22 04:05:37

标签: php symfony symfony-2.3

在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,但表格中不需要Slug。我不希望它在表单中被要求,因为它应该默认为标题,如果没有填写。除了手动检查它并在控制器中调用它如果没有填写,是否有一个更好的自动化方式形式表单配置?

2 个答案:

答案 0 :(得分:1)

对于此功能,我使用Doctrine Extensions。

在此处了解更多如何实施这些内容:http://symfony.com/doc/current/cookbook/doctrine/common_extensions.html

通过这种方法,你只需要为生成的slug做一件事就是在你的实体中定义一个可缓慢的属性。

答案 1 :(得分:0)

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