【问题标题】:Constructing an external URL within Laravel在 Laravel 中构建一个外部 URL
【发布时间】:2019-07-11 02:55:54
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 任何外部 URL 示例?您的意思是链接到其他网站?
  • @vivek_23 正确,我已经用一个例子更新了我的问题。

标签: php laravel url


【解决方案1】:

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));               
}

See it live on 3v4l.org.

【讨论】:

  • 正是我想要的,谢谢。很好地解释了为什么 Laravel 本身不包含这些功能。
  • 不客气,@1000Nettles。请注意,原始帖子中有一个小错误。已更正并链接到示例运行。
猜你喜欢
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多