route ('password.reset', $this->token, false) 助手函数 route 的 false 参数是做什么的 ?

app/Notifications/ResetPassword.php

     public function toMail($notifiable)
     {
         return (new MailMessage)
             ->subject('重置密码')
             ->line('这是一封密码重置邮件,如果是您本人操作,请点击以下按钮继续:')
             ->action('重置密码', url(route('password.reset', $this->token, false)))
             ->line('如果您并没有执行此操作,您可以选择忽略此邮件。');
     } 

这里面的 route('password.reset', $this->token, false) , 本书中第一回出现生成相对路径的情况(默认为true,生成绝对路径). 不知道这里为什么要生成相对路径, 生成绝对不可以吗? 是不是因为 mail 的缘故, 如下,mail 类的 action 方法里也没见到有说要相对链接什么的


   /**
     * Configure the "call to action" button.
     *
     * @param  string  $text
     * @param  string  $url
     * @return $this
     */
    public function action($text, $url)
    {
        $this->actionText = $text;
        $this->actionUrl = $url;

        return $this;
    }
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 4

route 函数为给定命名路由生成一个URL:

$url = route('routeName');

如果该路由接收参数,你可以将其作为第二个参数传递进来:

$url = route('routeName', ['id' => 1]);

默认情况下,route 函数生成的是绝对 URL,如果你想要生成一个相对 URL,可以传递 false 作为第三个参数:

$url = route('routeName', ['id' => 1], false);
5年前 评论

的确route('password.reset', $this->token)就已经可以生成正确的url了,不太明白这里为什么要这样写?

框架原生的写法是:
url(config('app.url').route('password.reset', $this->token, false)),不仅增加了一个url,还有一个config('app.url'),假设config('app.url')的值和域名不一样的话,激活邮件中的链接还会出错。而且当推送到线上https环境时,由于线上和本地的.env文件中的app_url并不一致,因此生成的激活链接也是有问题,无法打开的。

我能想到的唯一理由是,url这个方法实际上是Illuminate\Routing\UrlGenerator::to这个方法,此方法在最开始会先检测route方法生成的url是否为有效url,多了一重保障。
file

5年前 评论

你可以试一下 action 方法第二个参数到底能不能使用 相对路径,但 route() 方法可以生成

route('password.reset', 11, true) => "http://larabbs.test/password/reset/11"

不需要再在外面使用 url()

5年前 评论

@hustnzj 还是不太肯定你的说法,首先 route() 这里的路由实在 routes/web.php 里的,若 如果不存在的话,会报错,即使你再使用 url() 还是无法生成有效的 url , 这样的 目的 其实就是为了读取 .EVN 文件的的 APP_URL 为准,
链接 :问答:重置密码链接为什么是 localhost 而不是 sample 呢?哪里出错了

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!