所以,这是我的场景。我有一个名为 URL 的模型。URL 具有以下属性:(link
必需),scheme
(必需,但不安全。从链接中解析方案)以及其他一些属性,这些属性与此问题无关。
现在,我为该方案制作了一个自定义验证器,如下所示:
public function validateScheme($attribute, $param) {
if(empty($this->scheme)){
$this->addError('link', Yii::t('app', 'This is an invalid URL.'));
}
if (!in_array($this->scheme, $this->allowedSchemes)) {
$this->addError('link', Yii::t('app', 'This is an invalid URL.'));
}
}
网址规则:
public function rules() {
return [
['link', 'required', 'message' => Yii::t('app', 'URL can\'t be blank.')],
[['link'], 'safe'],
[['link'], 'string'],
['scheme', 'validateScheme']
];
}
当遇到无效方案时,这可以正常工作,例如让我们说 ftp。
但是,当输入完全无效的 URL 时,该 URLscheme
保持为空,并且validateScheme
永远不会触发,因为scheme
不需要属性。为了验证,我调用$model->validate()
了它,即使它不应该返回 true(或者应该是,因为无论如何都不需要该属性)。
validateScheme
所以,我的问题 2:无论属性是空的还是非空的,有没有办法强制触发?我似乎没有在文档中找到这样做的方法。
然后我尝试了另一种方式,并制作scheme
了一个必填字段。问题在于scheme
字段不安全且表单中不存在这一事实。因此,URL 不会保存,但不会显示错误。
我的问题 1,在这种情况下是:有没有办法分配targetAttribute
,scheme
以便错误消息如下所示link
?
PS我知道我可以在控制器中做到这一点。我不想那样做。我只想使用模型。