Правило active_url
Правило active_url применяется к валидации строк в Laravel и проверяет, что переданное значение является активным URL-адресом. Проверка осуществляется через функцию PHP checkdnsrr, которая проверяет наличие DNS-записей для домена. Если переданное значение не является корректным URL или домен не имеет DNS-записей, валидация не проходит. Правило не принимает дополнительных параметров.
Синтаксис
<?php
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($data, [
'field' => 'active_url'
]);
?>
Пример использования в контроллере
Давайте создадим валидатор для проверки поля 'website' на активный URL:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesValidator;
class PageController extends Controller
{
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'website' => 'active_url'
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
return response()->json(['message' => 'Validation passed']);
}
}
?>
Результат выполнения кода для корректного URL:
"Validation passed"
Пример с комбинацией правил
Часто правило active_url используется вместе с другими правилами, например, с required и string:
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'company_website' => 'https://google.com',
'personal_website' => ''
];
$validator = Validator::make($data, [
'company_website' => 'required|string|active_url',
'personal_website' => 'nullable|active_url'
]);
if ($validator->passes()) {
echo "All websites are valid";
} else {
print_r($validator->errors()->all());
}
?>
Результат выполнения кода:
"All websites are valid"
Использование в Form Request
Рассмотрим использование правила в отдельном классе FormRequest:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class WebsiteRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'url' => 'required|active_url',
'backup_url' => 'nullable|active_url'
];
}
public function messages(): array
{
return [
'url.active_url' => 'The URL must be an active website',
'url.required' => 'The URL field is required'
];
}
}
?>
Пример с коллекцией URL-адресов
Проверим массив URL-адресов на активность с использованием правила active_url:
<?php
use Illuminate\Support\Facades\Validator;
$data = [
'urls' => ['https://laravel.com', 'https://google.com', 'https://invalid.domain']
];
$validator = Validator::make($data, [
'urls.*' => 'active_url'
]);
if ($validator->fails()) {
$errors = $validator->errors()->all();
foreach ($errors as $error) {
echo $error . "\n";
}
} else {
echo "All URLs are active";
}
?>
Результат выполнения кода:
"The urls.2 must be an active URL"