Laravel Artisan CLI没有设置正确的URL

时间:2015-04-23 21:36:46

标签: php laravel laravel-5 command-line-interface artisan

概要

我在理解Artisan如何使用环境和.env文件方面遇到了一些麻烦。

我的问题是当我从命令行上的任务生成电子邮件时,使用url帮助器我无法生成正确的链接。

当我尝试运行以下命令时,我的电子邮件包含http://localhost/<link part>而不是http://domain.local/;我也在当地工作。

php artisan account:probation --method=notify
php artisan --env=production account:probation --method=notify
php artisan --env=local account:probation --method=notify

编辑我的数据库连接设置在.env内并连接,因为它收集了发送电子邮件所需的电子邮件地址以及创建的日期/时间,而不是能够根据APP_URL使用.env

当这些相同的电子邮件通过应用程序运行时,它们被正确设置为:http://domain.local/,所以现在我有点困惑。

1 个答案:

答案 0 :(得分:3)

查看'url'中的config/app.php键。这是Artisan获得的价值。默认情况下,它设置为'http://localhost'

如果您想使用APP_URL文件中的.env指定此值,则需要将配置文件中的'url'键更改为:

'url' => env('APP_URL'),

修改

通过网络运行时,有效的Request对象已可用。当通过Artisan运行时,Laravel必须创建一个假的Request对象。它使用配置中定义的URL来完成此操作。

此值将传递给Symfony create对象上的Request方法。此方法使用本机parse_url方法将值分解为url组件。如果解析的URL不包含host组件,则默认为localhost。

给定domain.local的网址,您会得到以下结果:

print_r(parse_url('domain.local'));
=====
Array
(
    [path] => domain.local
)

由于组件不包含host组件,因此主机将默认为localhost。

如果您使用//domain.local,则会得到以下结果:

print_r(parse_url('//domain.local'));
=====
Array
(
    [host] => domain.local
)

现在host组件存在,这将用于Artisan命令所需的任何URL生成。

要查看更多信息的源代码:

从配置中获取网址并创建Request
https://github.com/laravel/framework/blob/5.0/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php

正在生成Symfony Request(上面调用的create方法):
https://github.com/symfony/HttpFoundation/blob/master/Request.php