Создание внешнего URL в Laravel - PullRequest
0 голосов
/ 17 февраля 2019

Laravel имеет несколько отличных классов / методов обработки маршрутизации.Одним из них является класс Illuminate\Routing\UrlGenerator, который может обрабатывать всевозможные сложные генерации URL, относящиеся к маршрутизации в вашем приложении.

Мне не удалось найти какие-либо вспомогательные методы для создания внешней строки URL, аналогично тому, как работает to() метод UrlGenerator (получение пути и любые дополнительные параметры запроса.Примером внешнего URL-адреса может быть URL-адрес с базовым хостом и некоторые дополнительные параметры, например: https://www.youtube.com/watch?v=mDotS5BDqRM

Есть ли в Laravel что-нибудь, что могло бы помочь мне создать внешний URL-адрес, аналогичныйметод to()?Я не спрашиваю, как вручную объединить строку для создания URL-адреса и не вызывает напрямую метод format() в UrlGenerator.

Спасибо!

1 Ответ

0 голосов
/ 17 февраля 2019

Laravel обеспечивает создание URL для контроллеров вашего приложения, потому что он знает о ваших маршрутах и ​​о том, как они построены, чтобы Laravel работал.

Laravel не обеспечивает создание общего URL-адреса, потому что он ошибается на стороне KISS: не все приложения должны создавать внешний URL-адрес.Некоторые приложения не требуют внешних ссылок.Некоторые требуют только статические ссылки.Другим, вроде бы вашим, нужно создавать URI для приложений.

Вы можете использовать внешний пакет, например spatie/url или phpleague/uri (который может справиться с IRI), или любой другой - независимо от того, соответствуют ли они PSR-7 или нет.Вы также можете сделать свой собственный ролик:

function build_external_url(string $host, string $path = null, array $query = [], string $schema = null, int $port = null): string
{                                                                                
    $url = $host;                                                                
    if (null !== $port) {                                                     
        $url .= ':' . $port;                                                  
    }                                                                         
    if (null !== $path) {                                                        
        $url .= '/' . ltrim($path, '/');                                      
    }                                                                         
    if (! empty($query)) {                                                    
        $url .= '?' . http_build_query($query);                               
    }                                                                         
    return (null === $schema ? $url : ($schema . '://' . $url));               
}

Смотрите его в прямом эфире на 3v4l.org.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...