Yii2:为什么验证错误不抛出异常?

Yii2: Why do validation errors not throw exceptions?

我不确定这是否仅限于 Yii2,或者是否也可以与其他框架一起讨论,甚至一般。

在 Yii2 中,我可以调用 validate() on a model object. This will return true or false. If it is false I can call getErrors() 来查看此对象中当前存在哪些验证问题。

为什么以这种方式实现此行为?为什么 validate() 不抛出一些 ValidationExceptions?我发现错误是模型对象的一部分也有点奇怪。为什么他们不属于此类例外?

这个实现有什么优势?为什么这样做呢?我更喜欢例外。有了这个,我可以更好地区分所需的和异常的处理。所有不需要的都在 catch 块中处理。所需的发生在 try 块中。这不是个好主意吗?

因为一般情况下错误都是和表格结合使用的。

假设您有一个带有一些输入字段的表单(链接到模型 attributes/properties)并且您想要对这些字段执行某些操作,例如保存它们或其他操作。

在保存字段之前,您需要验证它们是否全部有效。当调用 validate() 方法时,所有属性都会被一个一个地验证,如果需要,每个属性都会产生一个错误。如果验证为假并且您有错误集合,您可以再次显示表单,但这次将错误附加到字段。

如果您在每次发生错误时抛出异常,您的应用程序将停止 运行ning 并且只显示一个错误。或者您必须为所有属性编写 try-catch 块,这是不必要的。当您的验证 returns 为真时,您可以 运行 下一步进行处理,您可以确保所有值都有效。

如果你真的想要异常,你当然可以编写自己的验证器 (http://www.yiiframework.com/doc-2.0/yii-validators-validator.html)