首页 > 解决方案 > 在 Laravel 中构建一个外部 URL

问题描述

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

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

Laravel 中是否有任何东西可以帮助我构建类似于该to()方法的外部 URL?我不是在问如何手动连接一个字符串来创建一个 URL,也不是直接format()UrlGenerator.

谢谢!

标签: phplaravelurl

解决方案


Laravel 为您的应用程序的控制器提供 URL 构建,因为它知道您的路由以及如何构建这些路由以使 Laravel 工作。

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

您可以使用外部包,如spatie/url, or 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 上现场观看。


推荐阅读