Symfony2.3 必需的实体属性,不是形式上的必需属性,如何动态默认属性


Symfony2.3 Required entity property, not requird in form, how do I default the property dynamically?

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

对于这个功能,我使用教义扩展。

在此处查找更多如何实现它们的信息:http://symfony.com/doc/current/cookbook/doctrine/common_extensions.html

使用这种方法,您只需要为生成 slug 所做的就是在实体中将属性定义为可操作的属性。

发现似乎

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