Laravel
February 22

Замена префиксов строк с  методом `replaceStart`

Требуется заменить текст в начале строки? Метод `Str::replaceStart` в Laravel предлагает аккуратный способ модифицировать строки только тогда, когда они начинаются с определенного содержимого.

Базовое использование

Замена текста в начале строки:

use Illuminate\Support\Str;

// Успешная замена
$replaced = Str::replaceStart('Hello', 'Laravel', 'Hello World');
// Результат: 'Laravel World'

// Без замены (не начинается с 'World')
$replaced = Str::replaceStart('World', 'Laravel', 'Hello World');
// Результат: 'Hello World'

Реальный пример

Рассмотрим, как его можно использовать в форматтере URL:

```php
class UrlFormatter
{
    public function normalizeProtocol(string $url, string $protocol = 'https')
    {
        // Замена http:// на https://
        $url = Str::replaceStart('http://', $protocol . '://', $url);
        
        // Добавление протокола, если он отсутствует
        if (!str_starts_with($url, $protocol . '://')) {
            $url = $protocol . '://' . $url;
        }
        
        return $url;
    }
    
    public function standardizeDomain(string $url, string $mainDomain)
    {
        // Замена www основным доменом
        $url = Str::replaceStart('www.', $mainDomain . '.', $url);
        
        // Замена dev основным доменом
        $url = Str::replaceStart('dev.', $mainDomain . '.', $url);
        
        return $url;
    }
    
    public function cleanupApiEndpoint(string $endpoint)
    {
        // Удаление ведущего /api, если присутствует
        return Str::replaceStart('/api', '', $endpoint);
    }
}

// Использование
$formatter = new UrlFormatter();

echo $formatter->normalizeProtocol('http://example.com');
// Вывод: 'https://example.com'

echo $formatter->standardizeDomain('www.example.com', 'app');
// Вывод: 'app.example.com'

echo $formatter->cleanupApiEndpoint('/api/users');
// Вывод: '/users'

Метод `replaceStart` обеспечивает точный контроль над модификацией строки, когда необходимо задать контент в начале строки.