Laravel具有一些出色的路由处理类/方法。 Illuminate\Routing\UrlGenerator
类就是其中一个,它能够处理与应用程序中的路由相关的各种复杂的URL生成。
我一直无法找到任何类型的辅助方法来构造外部URL字符串,类似于UrlGenerator
的{{1}}方法的工作方式(采用路径和任何其他查询参数) 。)外部URL的示例是带有基本主机的URL,以及一些额外的参数,例如:https://www.youtube.com/watch?v=mDotS5BDqRM
Laravel中是否有什么可以帮助我构造类似于to()
方法的外部URL的?我既不问如何手动连接字符串以创建URL,也不问如何直接在to()
中调用format()
方法。
谢谢!
答案 0 :(得分:3)
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));
}