问题标签 [symfony-validator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1576 浏览

doctrine - 在实体验证开始之前调度的验证器事件

问题

Symfony 2.8+ / 3.x+ 中是否可以在开始实体验证之前调度事件?

情况:

假设我们有 100 个实体,它们有 @LifeCycleCallbacks,它们有 @postLoad 事件,但其结果仅用于验证实体,在 99% 的情况下,@postLoad 的结果对系统并不重要。因此,如果我们从数据库中获取数百或数千个实体,那么不重要的数据将会丢失大量机器周期。

最好在验证开始之前运行某种事件,该事件将运行方法,该方法将填充该特定实体的数据。

代替:

我们可以有:

在 validate() 情况下, preValidate() 将作为 Event 自动发送(当然还要检查 Entity 是否有这样的方法)。

案例分析:

  1. 我有一个将页面/子页面存储为实体的系统。可以有 10 或 10000 个页面/子页面
  2. 页面/子页面可以有文件。
  3. 实体只存储文件名(因为我们不能存储 SplFileInfo - 资源序列化限制)
  4. 虽然 Entity->file 属性是字符串类型,但当我想让它成为 File 的实例时(所以我们可以对 File 类型进行验证),我有类似的东西:

好的,但是 postLoad() 会改变属性,而 Doctrine 会注意到这一点。所以在接下来

所有实体都将被刷新——即使 preSave() 将它改回原来的字符串。

因此,如果我有任何其他实体,比如说 TextEntity,我想删除它

无论文件属性的值是否与数据库中的值相同(并且更改只是暂时的),所有其他以某种方式更改的实体(更改已被 Doctrine 注意到)都会被刷新。

它会被冲洗掉。

因此,我们有数百个或数千个毫无意义的 sql 更新。

顺便提一句。

1. ->flush($textEntity) 将抛出异常,因为 ->remove($textEntity) 已经“删除”了该实体。

2. Entity property ->file 对于 Assert/File 必须是 File 类型,因为 FileValidator 只能接受 File 或 absolute-path-to-file 的值。但我不会存储文件的绝对路径,因为它在 Dev、Stage 和 Production 环境中完全不同。

这是我尝试按照 Symfony 食谱中所述进行文件上传时发生的问题http://symfony.com/doc/current/controller/upload_file.html

我的解决方案是,在 postLoad() 中,在不是 Doctrine 列的属性中创建 File 实例,并注明有断言等。

这行得通,但是无用的 postLoad()s 的问题仍然存在,我想到了事件。这可能是弹性且非常优雅的解决方案——而不是控制器变得“胖”。

任何人有更好的解决方案?或者知道如果 ->validate() 发生了如何调度事件?

0 投票
2 回答
1471 浏览

php - 构造时的学说实体验证

我正在尝试用教义来提高自己,并做最佳实践。我找到了一个很好的最佳实践介绍:https ://ocramius.github.io/doctrine-best-practices/#/50

我尝试在 __construct 之后拥有一个有效的对象。(请参阅https://ocramius.github.io/doctrine-best-practices/#/52)但我使用 @Assert 注释来验证我的对象。

我该怎么做才能验证?必须在 __construct 将验证器服务注入到我的对象中吗?

我的对象:

我的最终目标是对该实体的输入验证进行单元测试。

谢谢

编辑 :

根据 Yonel 的回答,我在构造函数的末尾添加了这个:

这是一个好的做法吗?如果不是,为什么?谢谢!

0 投票
1 回答
82 浏览

php - Symfony validation_groups 如何获取实体值

在 Symfony 中,我想动态验证表单。根据实体字段的值,我想启用验证组,在名为“已付款”的情况下。我使用以下代码:

我怎样才能让我在控制器中知道的实体在此表单被激活到此功能中?对于企业来说,它可以直接从表单中获取价值。

0 投票
2 回答
2134 浏览

doctrine-orm - Symfony - 在 INSERT、UPDATE 或 DELETE 中以不同方式验证实体

我想在创建、更新或删除实体时以不同方式验证实体原则。

我的实体类中有一个实体约束验证器。

在我的 CustomConstraint 中,我想确定是否将更新、创建或删除实体以执行特定的验证器。

使用工作单元是一种解决方案吗?

做这个的最好方法是什么?

我认为这个问题在很多应用程序中很常见?

谢谢大家 ;)

0 投票
1 回答
173 浏览

symfony - 如何使用 EntityType 表单类型避免复选框列表中的空值?

我有一个这样的表单字段:

这呈现了一个不错的复选框列表,我需要确保在提交表单后至少选择了一个选项,但即使该required选项true不起作用,我尝试使用NotBlank()NotNull()约束,也不起作用(即表单已验证)。

EntityType如何使用表单类型避免复选框列表中的空值?

0 投票
1 回答
43 浏览

symfony - 如何创建限制最大子代的约束

假设我有两个实体Bus并且它们之间People存在关系OneToMany。巴士最多可容纳 10 人。

如何创建一个约束来控制它?

例如:

0 投票
4 回答
6979 浏览

validation - Symfony 表单验证约束表达式

我有表单,需要创建内联验证:

如何白内联验证表达式为规则

  1. 计数2 >=计数1
  2. 计数3 <=计数2
  3. Count2 >= $someVariable
0 投票
1 回答
1437 浏览

symfony - Symfony 日期时间验证

我正在使用 jQuery 日期时间选择器插件,它以以下格式返回值

这是我在实体中定义它的方式

这是我添加表单元素的方式

这会正确呈现元素,但是当我提交表单时,无论我给它什么输入值,都会显示该字段的以下表单错误

此值无效

关于我在这里缺少什么的任何指针?YYYY-MM-DD H:i我想要格式的日期和时间。我唯一的问题是验证。

谢谢。

0 投票
0 回答
1070 浏览

validation - Symfony2:我如何验证一个对象/数组及其在另一个对象/数组中的约束?

它是动态构建的,注释不是一个选项。我在数组中有约束。

似乎您需要手动构建验证器,但我在需要构建需要加载器的 MetaDataFactory 时被卡住了,但所有加载器都有从文件加载元数据的工作。我不认为我'我做得对。

简单地说:

我有一个带有键/值的数组/对象。我希望它们由另一个包含约束的数组验证。

不可能遍历键并在每个键上调用 validate,因为有些依赖于其他键的上下文值。

我还可以构建一个包含两者的数组。

同样,对象/数组是动态构建的,我无法验证容器本身。它是关于它内部的键,它们本身就是定义。

所以我基本上想要的是:

我可以想象你需要一个自定义 MetaDataFactory / Loader / Context 类或其他东西,问题只是回调验证器需要访问$this->getRoot()以获取其他值

没关系,您需要像 CallbackLoader 这样的东西,您可以在其中创建自己的属性 => 约束映射。但是 LoaderInterface 需要 ClassMetaData 的具体实现,它自己无法处理数组或 ArrayObject,除非您在该 ArrayObject 上有方法/属性。但是——由于我的容器是动态构建的,我不能拥有它。由于 property/method_exists 调用,方法方法不是一个选项。

0 投票
1 回答
630 浏览

symfony - 给定“字符串”、“Doctrine\ORM\PersistentCollection”类型的预期参数

我正在使用collectiontype中的票证字段formbuilder并尝试为其添加服务器端验证。但是只有在添加断言验证时我才会遇到一些错误。

我的实体:

我的表格:

我收到此错误:

给定“字符串”类型的预期参数,“Doctrine\ORM\PersistentCollection”。