Symfony - 在实体断言注释中使用参数
Symfony - Use parameters in Entity assert annotations
我正在尝试使用 app/config/parameters.yml
中定义的模式在我网站的所有位置设置相同的 phone 正则表达式
parameters:
phone_regex: /^[+][3][3]\d{9}$/
如何在我的实体断言注释中检索此模式?
/**
* @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">
您可以做到这一点的唯一方法是创建您自己的自定义验证约束。一旦你在一个案例中完成它实际上很容易。
可以在此处找到很好的文档:http://symfony.com/doc/current/validation/custom_constraint.html
基本上是您可以做什么的总结:
- 构建可能扩展 Regex 约束的约束
- 构建相应的验证器(向其中注入容器或参数以获取您的正则表达式值)
- 使用你自己的约束而不是现有的约束。
目前在现有注释中没有使用参数的已知选项。
Joe 有一个很好的解决方案,但我的问题是 - 为什么要将其作为参数?这是您将来计划覆盖的东西吗?我猜不会。相反,您可以简单地制作一个 class w/constant 来保存您需要的信息:
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.
也很容易
我正在尝试使用 app/config/parameters.yml
parameters:
phone_regex: /^[+][3][3]\d{9}$/
如何在我的实体断言注释中检索此模式?
/**
* @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">
您可以做到这一点的唯一方法是创建您自己的自定义验证约束。一旦你在一个案例中完成它实际上很容易。
可以在此处找到很好的文档:http://symfony.com/doc/current/validation/custom_constraint.html
基本上是您可以做什么的总结:
- 构建可能扩展 Regex 约束的约束
- 构建相应的验证器(向其中注入容器或参数以获取您的正则表达式值)
- 使用你自己的约束而不是现有的约束。
目前在现有注释中没有使用参数的已知选项。
Joe 有一个很好的解决方案,但我的问题是 - 为什么要将其作为参数?这是您将来计划覆盖的东西吗?我猜不会。相反,您可以简单地制作一个 class w/constant 来保存您需要的信息:
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.
也很容易