Ефективно перевіряйте URL-адреси за допомогою методу Str::isUrl у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 29 травня, 2025
Чи знаєте ви, як просто перевірити дійсність URL-адрес за допомогою Laravel? Досліджте, як метод Str::isUrl спрощує валідацію URL, надаючи можливість зазначати протоколи для підвищення безпеки та гнучкості

Laravel спрощує валідацію URL завдяки методу Str::isUrl, який надає розробникам простий інструмент для перевірки допустимості URL з можливістю обмеження протоколів для підвищення безпеки та гнучкості

Метод isUrl забезпечує базову валідацію URL з можливістю зазначати прийнятні протоколи:

use Illuminate\Support\Str;

// Основна валідація URL
$isUrl = Str::isUrl('http://example.com');  // true
$isUrl = Str::isUrl('laravel');             // false

// З обмеженням протоколів
$isUrl = Str::isUrl('http://example.com', ['http', 'https']);

Цей метод особливо корисний у системах управління контентом, де потрібна валідація URL:

class ResourceValidator
{
    public function validateExternalLinks(array $links)
    {
        return collect($links)->filter(function ($url, $type) {
            return match ($type) {
                'documentation' => Str::isUrl($url, ['https']),
                'repository' => Str::isUrl($url, ['https']),
                'demo' => Str::isUrl($url, ['http', 'https']),
                default => Str::isUrl($url)
            };
        });
    }

    public function validateSecureResources(array $urls)
    {
        return collect($urls)
            ->filter(fn($url) => Str::isUrl($url, ['https']))
            ->values();
    }

    public function sanitizeBookmarks(array $bookmarks)
    {
        return array_filter($bookmarks, function ($bookmark) {
            // Дозволяємо лише http/https URL
            if (!Str::isUrl($bookmark, ['http', 'https'])) {
                return false;
            }
            // Додаткові перевірки тут
            return true;
        });
    }
}

// Використання
$validator = new ResourceValidator();
$externalLinks = [
    'documentation' => 'https://docs.example.com',
    'demo' => 'http://demo.example.com',
    'invalid' => 'not-a-url'
];
$validLinks = $validator->validateExternalLinks($externalLinks);

Метод також відмінно підходить для валідації форм, де користувачі подають різні типи URL:

class ProfileController extends Controller
{
    public function validateSocialMedia(Request $request)
    {
        $socialUrls = $request->input('social_urls', []);
        
        $validatedUrls = [];

        foreach ($socialUrls as $platform => $url) {
            if (empty($url)) continue;

            $isValid = match ($platform) {
                'linkedin' => Str::isUrl($url, ['https']) && str_contains($url, 'linkedin.com'),
                'twitter'  => Str::isUrl($url, ['https']) && str_contains($url, 'twitter.com'),
                'github'   => Str::isUrl($url, ['https']) && str_contains($url, 'github.com'),
                'portfolio' => Str::isUrl($url, ['http', 'https']),
                default    => false
            };

            if ($isValid) {
                $validatedUrls[$platform] = $url;
            }
        }

        return $validatedUrls;
    }

    public function validateCompanyWebsites(array $websites)
    {
        return array_filter($websites, function ($website) {
            return Str::isUrl($website, ['https']) && 
                   !str_contains($website, 'localhost') && 
                   !str_contains($website, '127.0.0.1');
        });
    }
}

Для API інтеграцій, які вимагають перевірки кінцевих точок:

class WebhookService
{
    public function registerWebhook(string $url, array $events)
    {
        // Перевіряємо, що URL вебхука безпечний
        if (!Str::isUrl($url, ['https'])) {
            throw new InvalidWebhookException('Webhook URLs must use HTTPS protocol');
        }

        // Додаткова перевірка для вебхуків
        if (!$this->isReachableEndpoint($url)) {
            throw new InvalidWebhookException('Webhook endpoint is not reachable');
        }

        return $this->createWebhookSubscription($url, $events);
    }

    public function validateIntegrationUrls(array $integrations)
    {
        $validated = [];

        foreach ($integrations as $service => $config) {
            if (isset($config['callback_url']) && 
                Str::isUrl($config['callback_url'], ['https'])) {
                $validated[$service] = $config;
            }
        }

        return $validated;
    }
}

Метод isUrl полегшує валідацію URL, забезпечуючи послідовний та надійний підхід для перевірки формату URL з гнучкістю через обмеження протоколів, що підвищує вимоги до безпеки

Популярні

Logomark Logotype

Журнал аудиту в Laravel

Хочете забезпечити повну прозорість у своїх Laravel-додатках? Пакет Laravel Audit Log допоможе вам детально відстежувати всі зміни моделей Eloquent та відповідати вимогам регуляторів. Читайте далі, щоб дізнатися, як цей потужний інструмент може підвищити надійність вашого проєкту

Logomark Logotype

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!

Logomark Logotype

Простий пакет RabbitMQ для Laravel

Вам цікаво дізнатися, як спростити інтеграцію RabbitMQ у вашому Laravel-додатку? У нашій статті ми розглянемо пакет Simple RabbitMQ, який дозволяє легко налаштувати багатозʼєднання, публікувати повідомлення та обробляти черги за допомогою простого синтаксису. Читайте далі, щоб дізнатися більше!