public clientValidateAttribute ( $model, $attribute, $view ) |
public function clientValidateAttribute($model, $attribute, $view)
{
$label = $model->getAttributeLabel($attribute);
$options = ['pattern' => new JsExpression($this->integerOnly ? $this->integerPattern : $this->numberPattern), 'message' => Yii::$app->getI18n()->format($this->message, ['attribute' => $label], Yii::$app->language)];
if ($this->min !== null) {
// ensure numeric value to make javascript comparison equal to PHP comparison
// https://github.com/yiisoft/yii2/issues/3118
$options['min'] = is_string($this->min) ? (double) $this->min : $this->min;
$options['tooSmall'] = Yii::$app->getI18n()->format($this->tooSmall, ['attribute' => $label, 'min' => $this->min], Yii::$app->language);
}
if ($this->max !== null) {
// ensure numeric value to make javascript comparison equal to PHP comparison
// https://github.com/yiisoft/yii2/issues/3118
$options['max'] = is_string($this->max) ? (double) $this->max : $this->max;
$options['tooBig'] = Yii::$app->getI18n()->format($this->tooBig, ['attribute' => $label, 'max' => $this->max], Yii::$app->language);
}
if ($this->skipOnEmpty) {
$options['skipOnEmpty'] = 1;
}
ValidationAsset::register($view);
return 'yii.validation.number(value, messages, ' . Json::htmlEncode($options) . ');';
}
/** * https://github.com/yiisoft/yii2/issues/3118 */ public function testClientValidateComparison() { $val = new NumberValidator(['min' => 5, 'max' => 10]); $model = new FakedValidationModel(); $js = $val->clientValidateAttribute($model, 'attr_number', new View(['assetBundles' => ['yii\\validators\\ValidationAsset' => true]])); $this->assertContains('"min":5', $js); $this->assertContains('"max":10', $js); $val = new NumberValidator(['min' => '5', 'max' => '10']); $model = new FakedValidationModel(); $js = $val->clientValidateAttribute($model, 'attr_number', new View(['assetBundles' => ['yii\\validators\\ValidationAsset' => true]])); $this->assertContains('"min":5', $js); $this->assertContains('"max":10', $js); $val = new NumberValidator(['min' => 5.65, 'max' => 13.37]); $model = new FakedValidationModel(); $js = $val->clientValidateAttribute($model, 'attr_number', new View(['assetBundles' => ['yii\\validators\\ValidationAsset' => true]])); $this->assertContains('"min":5.65', $js); $this->assertContains('"max":13.37', $js); $val = new NumberValidator(['min' => '5.65', 'max' => '13.37']); $model = new FakedValidationModel(); $js = $val->clientValidateAttribute($model, 'attr_number', new View(['assetBundles' => ['yii\\validators\\ValidationAsset' => true]])); $this->assertContains('"min":5.65', $js); $this->assertContains('"max":13.37', $js); }