我不确定这是否仅限于Yii2,或者是否也可以与其他框架或甚至一般性讨论。
在Yii2中,我可以在模型对象上调用validate()。这将返回true或false。如果为false,我可以调用getErrors()来查看此对象中当前存在哪些验证问题。
为什么这种行为是以这种方式实现的?为什么validate()不会抛出一些ValidationExceptions?我发现错误也是模型对象的一部分。为什么他们不属于这种例外?
此实施有哪些优势?为什么这样做?我更喜欢例外。有了这个,我可以更好地区分所需的和特殊的处理。所有不需要的东西都在catch块中处理。期望发生在try块中。这不是一个好主意吗?
答案 0 :(得分:6)
因为通常错误与表单结合使用。
假设您有一个带有一些输入字段的表单(链接到模型属性/属性),并且您希望对这些字段执行某些操作,可能会保存它们或其他内容。
在保存字段之前,您需要验证它们是否全部有效。调用validate()
方法时,将逐个验证所有属性,如果需要,每个属性都会生成错误。如果验证为false并且您有错误集合,则可以再次显示表单,但这次将错误附加到字段。
如果每次发生错误时都抛出异常,应用程序将停止运行并仅显示一个错误。或者您必须为所有属性编写try-catch块,这是不必要的。当验证返回true时,您可以运行执行处理的下一步,并确保所有值都有效。
如果您真的想要例外,当然可以编写自己的验证者(http://www.yiiframework.com/doc-2.0/yii-validators-validator.html)