Вот этот адрес и надо проверять.
Вот описание этого поля:
Код: Выделить всё
['adress', 'url', 'message' => 'Поле Адрес должно содержать допустимый URL'],
Не подскажите как это сделать ?
Код: Выделить всё
['adress', 'url', 'message' => 'Поле Адрес должно содержать допустимый URL'],
Код: Выделить всё
/**
* @inheritdoc
* @return array
*/
public function rules()
{
return [
//...
['address', 'url', 'validSchemes' => ['https', 'http']],
['address', 'validateAddress'],
];
}
/**
* Наш валидатор
* @param $attribute
*/
public function validateAddress($attribute)
{
if (!empty($this->address)) {
$domain = $_SERVER['HTTP_HOST'];
$address = $this->stripToDomainName($this->address);
if ($domain != $address) {
$this->addError($attribute, 'Указанный url не принадлежит текущему домену!');
}
}
}
/**
* Разбираем URL
* @param string $uri
* @return null|string|string[]
*/
protected function stripToDomainName($uri = '')
{
$uri = strtolower(trim($uri));
$uri = preg_replace('%^(http:\/\/|https:\/\/)*(www.)*%usi', '', $uri);
$uri = preg_replace('%\/.*$%usi', '', $uri);
return $uri;
}
//...
Код: Выделить всё
<?php $form = ActiveForm::begin([
'validationUrl' => ['ajax-validate'],
'enableAjaxValidation' => true,
]); ?>
Код: Выделить всё
/**
* @return array|\yii\web\Response
*/
public function actionAjaxValidate()
{
$model = new ContactForm(); // Ваша модель
if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return \yii\bootstrap\ActiveForm::validate($model);
}
return $this->redirect(Yii::$app->request->referrer);
}
Код: Выделить всё
/**
* Наш валидатор
* @param $attribute
*/
public function validateAddress($attribute)
{
if (!empty($this->address)) {
//$domain = $_SERVER['HTTP_HOST'];
$domain = ($_SERVER['HTTPS'] ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'];
$parse = parse_url($this->address);
$address = $parse['scheme'] . '://' . $this->stripToDomainName($this->address);
if ($domain != $address) {
$this->addError($attribute, 'Указанный url не принадлежит текущему домену!');
}
}
}