在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 方法。这将允许它在实体上正确验证,但允许表单在不需要字段的情况下进行处理。