Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony2.3必需的实体属性,而不是表单中的必需属性,如何动态默认该属性?_Php_Symfony_Symfony 2.3 - Fatal编程技术网

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

Php Symfony2.3必需的实体属性,而不是表单中的必需属性,如何动态默认该属性?,php,symfony,symfony-2.3,Php,Symfony,Symfony 2.3,在Symfony2.3中,我试图将实体配置为如下所示 示例是一个基本页面实体 我有两个属性 /** *@ORM\Column(type="string",length=255) *@Assert\NotBlank() */ protected $slug; /** *set slug *@return Campaign */ protected $slug; 及 虽然Slug在实体中是必需的,但在表单中不是必需的。我不希望它是必需的形式,因为它应该默认的标题,如果没有填写。除了手动检查

在Symfony2.3中,我试图将实体配置为如下所示

示例是一个基本页面实体

我有两个属性

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

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


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

对于此功能,我使用条令扩展

在此处了解如何实现这些功能的更多信息:


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

发现最有组织的方法是使用事件订阅服务器。表单绑定后,如果slug为false,则调用set 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;
}