Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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-inyml中的验证约束_Php_Symfony_Yaml - Fatal编程技术网

Php 如何将参数传递给Symfony2-inyml中的验证约束

Php 如何将参数传递给Symfony2-inyml中的验证约束,php,symfony,yaml,Php,Symfony,Yaml,我正在尝试向我的应用程序添加一个包范围的参数,以便将其添加到我的验证约束文件(Validation.yml): 我在config.yml中添加了我的参数: parameters: # Validation config myvariable: Please tell us your name. 但是页面只呈现%myvariable%文本,而不是所需的字符串。在将验证消息添加到页面以便在JavaScript中使用时,我还希望在FormBuilderInterface中使用此参数。

我正在尝试向我的应用程序添加一个包范围的参数,以便将其添加到我的验证约束文件(Validation.yml):

我在config.yml中添加了我的参数:

parameters:
    # Validation config
    myvariable: Please tell us your name.

但是页面只呈现%myvariable%文本,而不是所需的字符串。在将验证消息添加到页面以便在JavaScript中使用时,我还希望在FormBuilderInterface中使用此参数。yml允许这样做吗?如果没有,我如何在更高级别包含这样的参数?

否,目前不可能

它与YAML或XML甚至服务定义无关。验证程序组件本身读取验证规则——正如您所看到的,该结构与服务定义的结构大不相同。不幸的是,它不能替换约束中的参数

主要逻辑位于由
\Symfony\Component\Validator\Mapping\Loader\YamlFileLoader
创建的
\Symfony\Component\Validator\ValidatorBuilder::getValidator

您可以通过以下方式实现这一点:

  • 覆盖
    validator.builder
    服务的定义
  • 它是使用
    %validator.builder.factory.class%构造的:createValidatorBuilder
    ,但由于您必须以某种方式获取参数包,因此没有足够的依赖项-使用的是类工厂,而不是服务工厂

  • 创建新类,该类扩展了
    ValidatorBuilder
  • 应将参数包带入构造函数或通过setter。应在此处传递的步骤(1)中对其进行配置

    这个类将创建另一个类的文件加载器(参见3),并将该参数包传递给它

  • YamlFileLoader
    YamlFilesLoader
    创建新类。对于您希望支持的每种格式,增加2个
  • 它还将把参数包带到构造函数中,并覆盖一些功能。例如,我认为所有的参数处理都可以在
    newConstraint
    方法中完成——迭代选项,解析参数,然后用替换的选项调用父方法


    Symfony可以这样扩展很好(在这个用例中可能不是很好),但我想用自定义约束验证器编写您自己的约束会更容易,它会将该参数注入其中

    还考虑验证器服务周围的包装器——如果您只需要替换验证消息,可以替换<代码>验证器< /C>服务,将原始的一个注入其中。有关更多信息,请参阅。

    我有同样的问题(以前没有发现这个问题),其中有一些有趣的评论(但还没有答案):
    parameters:
        # Validation config
        myvariable: Please tell us your name.