Laravel url函数隐藏的坑

在config/app.php里面有这样一个设置项:

    /*
    |--------------------------------------------------------------------------
    | Application URL
    |--------------------------------------------------------------------------
    |
    | This URL is used by the console to properly generate URLs when using
    | the Artisan command line tool. You should set this to the root of
    | your application so that it is used when running Artisan tasks.
    |
    */

    'url' => 'http://localhost',
    
    

由上面的注释可知,当我们以cli模式调用php时,就会使用这个url来生成正确的网址。

遇坑过程

当我尝试使用redis作为mail发送队列的时候,需要将发送的邮件放到redis里面后,然后执行php artisan queue:listen将邮件读取出来并发送。
由于发送的邮件模板里面使用url()函数,因此理论上会读取到config/app.php里面url的设定值。
提前说明一下,为了部署的灵活性,我预先在env文件里面设置了APP_URL,然后在app.php里面调用它。

好,重点的地方到了!
在本地开发时,无论我尝试多少遍,邮件里面url('/')取到的值永远都是localhost!!
但是!将代码部署到远程以后(当然env里面APP_URL设置值已更改为部署服务器的网址),居然邮件里面显示是正常的!!!

经过多次测试,和使用php artisan tinker进行了反复确认,确实在本地无论配置怎么改,url('/')永远都是localhost;而服务器永远都是www.zshanjun.com

问题是,为什么本地表现出这样的行为?

填坑过程

问题出现在本地,那么我就从本地找原因。
通常我们在本地开发时,一般都习惯将网站的域名设置为例如zshanjun.dev

问题就出现在这个地方!

当我在本地开发时,会直接将APP_URL设置为zshanjun.dev,在线上的时候,会将APP_URL设置为http://www.zshanjun.com

这时候,如果细心一点,应该就能发现它们两者的区别了!

解决方案就是,给zshanjun.dev也加上http://!

到此问题解决!


参考网站:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容