在Laravel中构造一个外部URL

时间:2019-02-17 16:23:08

标签: php laravel url

Laravel具有一些出色的路由处理类/方法。 Illuminate\Routing\UrlGenerator类就是其中一个,它能够处理与应用程序中的路由相关的各种复杂的URL生成。

我一直无法找到任何类型的辅助方法来构造外部URL字符串,类似于UrlGenerator的{​​{1}}方法的工作方式(采用路径和任何其他查询参数) 。)外部URL的示例是带有基本主机的URL,以及一些额外的参数,例如:https://www.youtube.com/watch?v=mDotS5BDqRM

Laravel中是否有什么可以帮助我构造类似于to()方法的外部URL的?我既不问如何手动连接字符串以创建URL,也不问如何直接在to()中调用format()方法。

谢谢!

1 个答案:

答案 0 :(得分:3)

Laravel为应用程序的控制器提供URL构建,因为它了解您的路由以及如何构建路由以使Laravel正常工作。

Laravel不提供通用的URL构建,因为它在KISS方面犯了错误:并非所有应用程序都需要构建外部URL。某些应用程序不需要外部链接。有些只需要静态链接。看起来像您的其他人则需要以应用程序特定的方式构建URI。

您可以使用外部软件包,例如spatie/urlphpleague/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));               
}

See it live on 3v4l.org.