专栏首页编程学习园地如何修改Laravel中url()函数生成URL的根地址

如何修改Laravel中url()函数生成URL的根地址

前言

本文主要给大家介绍了修改Laravel中url()函数生成URL的根地址的相关内容,相信大家都晓得 Larevel 的一票帮助函数中有个 url(),可以通过给予的目录生成完整的 URL,是非常方便的一个函数:

// return:

url('user/profile')

但是这玩意生成的 URL 中要补完的部分是框架内部根据 Request 自动判断的,而自动判断出的东西有时候会出错(譬如在套了一层反向代理之类的情况下)。

文档上并没有提到我们要如何才能自定义它生成的 URL 中的根地址和协议头部分(http(s)),这就非常吃瘪了。那我们要咋办呢?

首先我们来看看 u/

/rl() 被定义的位置:

/**

function url($path = null, $parameters = [], $secure = nul/

/l)

{

if (is_null($path)) {

return app(UrlGenerator::class);

}

return app(UrlGenerator::class)->to($path, $parameters, $secure);

}

可以看到,它从 Laravel 的服务容器中解析出了一个 IlluminateContractsRoutingUrlGenerator,并且把参数转交给了这个对象的 to 方法。

而这个 UrlGenerator 类是在 src/Illuminate/Routing/RoutingServiceProvider.php 这个服务提供者中被绑定到服务容器上去的:

/**

protected function registerUrlGenerator()

{

$this->app['url'] = $this->app->share(function ($app) {

// 略

$url = new UrlGenerator(

$routes, $app->rebinding(

'request', $this->requestRebinder()

)

);

return $url;

});

}

这也就意味着我们可以随时通过 url 这个 abstract 来访问服务容器中的这个 UrlGenerator,并且修改它。

而且它也确实暴露了我们需要的方法:forceSchema 和 forceRootUrl。

修改 url() 函数生成的 URL 中的根地址的代码如下:

// 用它提供的方法检测 URL 是否有效

if (app('url')->isValidUrl($rootUrl)) {

app('url')->forceRootUrl($rootUrl);

}

// 强制生成使用 HTTPS 协议的 URL

app('url')->forceSchema('https');

上面那些代码推荐放在自定义的 ServiceProvider,这样之后所有的 url() 函数生成的链接都会使用上面定义的根地址和协议了。

所以说啊,要真正掌握 Laravel 的那些东西,光看文档还是不够的。而且 Laravel 的源码文档做的很不错,读起来很清晰,能学到不少东西。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

原文链接:https://www.blog.zirun.me.com/php/4680.html

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于 Web 函数部署您的 Laravel 项目 - Web Function 实践教程(三)

    PHP 是搭建 Web 服务的常用开发语言之一,基于 PHP 也衍生出了众多 Web 开发框架,Laravel 便是其中的优秀代表,它具有富于表达性且简洁的语...

    腾讯云serverless团队
  • 3分钟短文:Laravel slug,让你的url地址更“好记”

    网络资源访问,路由是多么重要不消多言了。而友好的url地址更是能让人一目了然,增加用户的好感。同时对于爬虫也是好的示例,搜索引擎可以友好地展开工作了。

    程序员小助手
  • PHP-Laravel入门使用(路由)

    什么是路由:将用户的请求按照事先规划的方案提交给指定的控制器或者功能函数来进行处理.【通俗的讲,路由就是访问地址形式】 在博客中,当我们在URL地址中,传递p...

    cwl_java
  • Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解

    注意:文章标题中5.2+表示该文章内容可向上兼容,适用于Laravel版本5.2及更高(目前最新为5.6),但不可向下兼容,即不适用于5.2版本以下。推荐大家花...

    砸漏
  • 在 Laravel 控制器中进行表单请求字段验证

    在 Web 应用中,用户提交的数据往往是不可预测的,因此一个非常常见的需求是对用户提交的表单请求进行验证,以确保用户输入的是我们所期望的数据格式。很多 Web ...

    学院君
  • Laravel推荐使用的十个辅助函数

    Laravel 包含各种全局辅助函数。 laravel 中包含大量辅助函数,您可以使用它们来简化开发工作流程。 在这里,我将编写 10 个最好的 laravel...

    砸漏
  • Laravel 5 系列入门教程(一)【最适合中国人的 Laravel 教程】

    2. http://www.golaravel.com/laravel/docs/5.0/

    竹清
  • Laravel 5 系列入门教程(二)【最适合中国人的 Laravel 教程】

    我们将改变学习路线,不再像 Laravel 4 教程那样先构建登录系统。在本篇教程中,我们将一起构建 Pages 的管理功能,尝试 Laravel 的路由和 P...

    竹清
  • 3分钟短文:Laravel路子真野啊!路由昵称前缀中间件

    上一章内容我们介绍了使用laravel路由动词定义方便的url,以及通过url参数绑定传递数据, 本文我们继续深入Route功能,学习一些提升生产力的方法,在现...

    程序员小助手
  • 如何为LARAVEL生成站点地图

    站点地图是提升应用程序SEO的最重要部分。在这里,我将尝试解释在Laravel应用中实现动态站点地图的最简单方法。

    Lemon黄
  • 通过匿名函数和验证规则类自定义 Laravel 字段验证规则

    Laravel 验证器的强大之处不仅在于提供前面提到的多种请求验证方式,以及非常丰富的字段验证规则(不同规则可以组合形成新的验证规则),从 5.5 版本开始,还...

    学院君
  • Go 语言 Web 编程系列(五)—— 基于 gorilla/mux 包实现路由匹配:进阶使用篇

    上篇教程我们介绍了 gorilla/mux 路由的基本使用,这篇教程继续介绍它的更多匹配规则,实际上,它可能是一个比 Laravel 路由更加强大的存在。

    学院君
  • Laravel源码笔记(二)路由

    路由是web服务不可或缺的一部分,一个好的web框架必须具备一整套灵活且丰富的路由系统。Laravel自然也不例外,通过配置文件中一两行代码就可以...

    asterDY
  • PHP实现微信公众号验证Token的示例代码

    很久之前做过一次公众号的开发,当时就遇到了一个验证的小坑,但是由于时间紧任务急处理完了也就没在意,可谁知最近刚刚上马一个新的公众号项目又遇到了同样的小坑,痛定思...

    砸漏
  • [Laravel]修改Laravel 使之http,https自适应的方法

    我之前一直使用的是http,所以部署lnmpa也无所谓,毕竟全都是http通信的。

    用户2353021
  • ThinkPHP5框架与ThinkPHP3.2的对比区别

    沈唁
  • ElasticSearch全文检索引擎-使用

    具体的字段意思手册上都有 创建 curl -XPOST "http://ip:port/shop" -d'@createindex.json 这里的sho...

    gaobinzhan
  • Laravel学习教程之路由模块

    前言 本文主要给大家介绍的是关于Laravel路由模块的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 备注:本文是基于Larave...

    用户2323866
  • Laravel框架实现即点即改功能的方法分析

    / 本文实例讲述了Laravel框架实现即点即改功能的方法。分享给大家供大家参考,具体如下:

    用户8832582

扫码关注云+社区

领取腾讯云代金券