在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。我不希望它在表单中被要求,因为它应该默认为标题,如果没有填写。除了手动检查它并在控制器中调用它如果没有填写,是否有一个更好的自动化方式形式表单配置?
答案 0 :(得分:1)
对于此功能,我使用Doctrine Extensions。
在此处了解更多如何实施这些内容:http://symfony.com/doc/current/cookbook/doctrine/common_extensions.html
通过这种方法,你只需要为生成的slug做一件事就是在你的实体中定义一个可缓慢的属性。
答案 1 :(得分:0)
发现最有组织的方式是事件订阅者。在表单绑定之后,如果slug为false,则调用set slug方法。这将允许它在实体上正确验证,但允许表单处理而不需要字段。