问题标签 [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.
doctrine - 在实体验证开始之前调度的验证器事件
问题
Symfony 2.8+ / 3.x+ 中是否可以在开始实体验证之前调度事件?
情况:
假设我们有 100 个实体,它们有 @LifeCycleCallbacks,它们有 @postLoad 事件,但其结果仅用于验证实体,在 99% 的情况下,@postLoad 的结果对系统并不重要。因此,如果我们从数据库中获取数百或数千个实体,那么不重要的数据将会丢失大量机器周期。
最好在验证开始之前运行某种事件,该事件将运行方法,该方法将填充该特定实体的数据。
代替:
我们可以有:
在 validate() 情况下, preValidate() 将作为 Event 自动发送(当然还要检查 Entity 是否有这样的方法)。
案例分析:
- 我有一个将页面/子页面存储为实体的系统。可以有 10 或 10000 个页面/子页面
- 页面/子页面可以有文件。
- 实体只存储文件名(因为我们不能存储 SplFileInfo - 资源序列化限制)
- 虽然 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() 发生了如何调度事件?
php - 构造时的学说实体验证
我正在尝试用教义来提高自己,并做最佳实践。我找到了一个很好的最佳实践介绍:https ://ocramius.github.io/doctrine-best-practices/#/50
我尝试在 __construct 之后拥有一个有效的对象。(请参阅https://ocramius.github.io/doctrine-best-practices/#/52)但我使用 @Assert 注释来验证我的对象。
我该怎么做才能验证?必须在 __construct 将验证器服务注入到我的对象中吗?
我的对象:
我的最终目标是对该实体的输入验证进行单元测试。
谢谢
编辑 :
根据 Yonel 的回答,我在构造函数的末尾添加了这个:
这是一个好的做法吗?如果不是,为什么?谢谢!
php - Symfony validation_groups 如何获取实体值
在 Symfony 中,我想动态验证表单。根据实体字段的值,我想启用验证组,在名为“已付款”的情况下。我使用以下代码:
我怎样才能让我在控制器中知道的实体在此表单被激活到此功能中?对于企业来说,它可以直接从表单中获取价值。
doctrine-orm - Symfony - 在 INSERT、UPDATE 或 DELETE 中以不同方式验证实体
我想在创建、更新或删除实体时以不同方式验证实体原则。
我的实体类中有一个实体约束验证器。
在我的 CustomConstraint 中,我想确定是否将更新、创建或删除实体以执行特定的验证器。
使用工作单元是一种解决方案吗?
做这个的最好方法是什么?
我认为这个问题在很多应用程序中很常见?
谢谢大家 ;)
symfony - 如何使用 EntityType 表单类型避免复选框列表中的空值?
我有一个这样的表单字段:
这呈现了一个不错的复选框列表,我需要确保在提交表单后至少选择了一个选项,但即使该required
选项true
不起作用,我尝试使用NotBlank()
和NotNull()
约束,也不起作用(即表单已验证)。
EntityType
如何使用表单类型避免复选框列表中的空值?
symfony - 如何创建限制最大子代的约束
假设我有两个实体Bus
并且它们之间People
存在关系OneToMany
。巴士最多可容纳 10 人。
如何创建一个约束来控制它?
例如:
validation - Symfony 表单验证约束表达式
我有表单,需要创建内联验证:
如何白内联验证表达式为规则
- 计数2 >=计数1
- 计数3 <=计数2
- Count2 >= $someVariable
symfony - Symfony 日期时间验证
我正在使用 jQuery 日期时间选择器插件,它以以下格式返回值
这是我在实体中定义它的方式
这是我添加表单元素的方式
这会正确呈现元素,但是当我提交表单时,无论我给它什么输入值,都会显示该字段的以下表单错误
此值无效
关于我在这里缺少什么的任何指针?YYYY-MM-DD H:i
我想要格式的日期和时间。我唯一的问题是验证。
谢谢。
validation - Symfony2:我如何验证一个对象/数组及其在另一个对象/数组中的约束?
它是动态构建的,注释不是一个选项。我在数组中有约束。
似乎您需要手动构建验证器,但我在需要构建需要加载器的 MetaDataFactory 时被卡住了,但所有加载器都有从文件加载元数据的工作。我不认为我'我做得对。
简单地说:
我有一个带有键/值的数组/对象。我希望它们由另一个包含约束的数组验证。
不可能遍历键并在每个键上调用 validate,因为有些依赖于其他键的上下文值。
我还可以构建一个包含两者的数组。
同样,对象/数组是动态构建的,我无法验证容器本身。它是关于它内部的键,它们本身就是定义。
所以我基本上想要的是:
我可以想象你需要一个自定义 MetaDataFactory / Loader / Context 类或其他东西,问题只是回调验证器需要访问$this->getRoot()
以获取其他值
没关系,您需要像 CallbackLoader 这样的东西,您可以在其中创建自己的属性 => 约束映射。但是 LoaderInterface 需要 ClassMetaData 的具体实现,它自己无法处理数组或 ArrayObject,除非您在该 ArrayObject 上有方法/属性。但是——由于我的容器是动态构建的,我不能拥有它。由于 property/method_exists 调用,方法方法不是一个选项。
symfony - 给定“字符串”、“Doctrine\ORM\PersistentCollection”类型的预期参数
我正在使用collectiontype
中的票证字段formbuilder
并尝试为其添加服务器端验证。但是只有在添加断言验证时我才会遇到一些错误。
我的实体:
我的表格:
我收到此错误:
给定“字符串”类型的预期参数,“Doctrine\ORM\PersistentCollection”。