我正在尝试使用app/config/parameters.yml
parameters:
phone_regex: /^[+][3][3]\d{9}$/
如何在我的实体断言注释中检索此patern?
/**
* @var string
* @Assert\NotBlank(message = "notBlank")
* @Assert\Regex(
* pattern="%phone_regex%",
* message="phone"
* )
* @ORM\Column(name="contact_phone", type="string", length=255)
*/
private $contactPhone;
上面的代码不起作用,它生成没有正则表达式的HTML
<input type="text" id="client_contactPhone" name="client[contactPhone]" required="required" maxlength="255" pattern=".*phone_regex.*" class="form-control">
答案 0 :(得分:3)
您可以这样做的唯一方法是创建自己的自定义验证约束。一旦你在一个案例中完成它就很容易。
可以在此处找到一份好的文档:http://symfony.com/doc/current/validation/custom_constraint.html
基本上是您可以做的总结:
目前没有已知的选项可以在现有注释中使用参数。
答案 1 :(得分:3)
Joe有一个很好的解决方案,但我的问题是 - 为什么这个作为参数呢?这是你将来计划压倒的东西吗?我不猜。相反,你可以简单地创建一个包含所需信息的常量类:
class Phone
{
const VALID_REGEX = '/^[+][3][3]\d{9}$/';
}
然后,为您的注释:
/**
* @var string
* @Assert\NotBlank(message = "notBlank")
* @Assert\Regex(
* pattern=Phone::VALID_REGEX,
* message="phone"
* )
* @ORM\Column(name="contact_phone", type="string", length=255)
*/
private $contactPhone;
这样您仍然可以使用Regex验证器,而不是使用其他自定义验证类型重新发明轮子。
另一个主要好处是,您可以在代码中的任何位置使用它,而无需将参数注入服务或其他任何内容。加上access class constants from Twig很容易。