From a954312a1831806ff21fd7b3f7d5a6603d02acef Mon Sep 17 00:00:00 2001 From: resurtm Date: Wed, 22 May 2013 14:18:39 +0600 Subject: [PATCH] Fixes #312. Additional docs on IDN in EmailValidator and UrlValidator. --- framework/yii/validators/EmailValidator.php | 6 ++++++ framework/yii/validators/UrlValidator.php | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/framework/yii/validators/EmailValidator.php b/framework/yii/validators/EmailValidator.php index 0733d2c..292da88 100644 --- a/framework/yii/validators/EmailValidator.php +++ b/framework/yii/validators/EmailValidator.php @@ -8,6 +8,7 @@ namespace yii\validators; use Yii; +use yii\base\InvalidConfigException; use yii\helpers\Html; use yii\web\JsExpression; use yii\helpers\Json; @@ -50,6 +51,8 @@ class EmailValidator extends Validator /** * @var boolean whether validation process should take into account IDN (internationalized domain * names). Defaults to false meaning that validation of emails containing IDN will always fail. + * Note that in order to use IDN validation you have to install and enable `intl` PHP extension, + * otherwise an exception would be thrown. */ public $enableIDN = false; @@ -60,6 +63,9 @@ class EmailValidator extends Validator public function init() { parent::init(); + if ($this->enableIDN && !function_exists('idn_to_ascii')) { + throw new InvalidConfigException('In order to use IDN validation intl extension must be installed and enabled.'); + } if ($this->message === null) { $this->message = Yii::t('yii', '{attribute} is not a valid email address.'); } diff --git a/framework/yii/validators/UrlValidator.php b/framework/yii/validators/UrlValidator.php index e7f344a..6cf12c1 100644 --- a/framework/yii/validators/UrlValidator.php +++ b/framework/yii/validators/UrlValidator.php @@ -8,6 +8,7 @@ namespace yii\validators; use Yii; +use yii\base\InvalidConfigException; use yii\helpers\Html; use yii\web\JsExpression; use yii\helpers\Json; @@ -40,7 +41,8 @@ class UrlValidator extends Validator /** * @var boolean whether validation process should take into account IDN (internationalized * domain names). Defaults to false meaning that validation of URLs containing IDN will always - * fail. + * fail. Note that in order to use IDN validation you have to install and enable `intl` PHP + * extension, otherwise an exception would be thrown. */ public $enableIDN = false; @@ -51,6 +53,9 @@ class UrlValidator extends Validator public function init() { parent::init(); + if ($this->enableIDN && !function_exists('idn_to_ascii')) { + throw new InvalidConfigException('In order to use IDN validation intl extension must be installed and enabled.'); + } if ($this->message === null) { $this->message = Yii::t('yii', '{attribute} is not a valid URL.'); }